2012-05-26 122 views
1

我有两个UIButtons,我想在数字1 UIButton首先单击,然后在2号UIButton。点击第二个UIButton后,我想让两个UIButton自动旋转。我用CABasicAnimation来旋转它们。这两个UIButton的操作与buttonClicked的操作相同。这两个按钮使用不同的CABasicAnimation方法。如何在不点击按钮的情况下开始操作?

我已经创建了一个新的方法来旋转它,但是当我从button clicked动作(对于两个按钮相同)调用它时,只有第一个被旋转。为了调用旋转方法,我使用[self rotateButtons];

问题是,如果我插入新的UIButton并给IBAction新按钮就没有问题。但我不想在图层中添加一个新按钮。

我如何修复rotateButtons以便两个按钮可以同时旋转

下面是代码:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag 
{ 
    if ([value isEqualToString:@"SecondImage"]) 
    { 
     UIImageView *myView2=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton+100]; 
     [myView2 setHidden:FALSE]; 
     UIImageView *myView=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton]; 
     [myView setHidden:TRUE]; 
     CALayer *layer2 = myView2.layer; 
     layer2.anchorPoint = CGPointMake(0.5f, 0.5f); 
     CABasicAnimation *animateImage2 = [CABasicAnimation animationWithKeyPath: @"transform"]; 
     CATransform3D transform2 = CATransform3DIdentity; 
     transform2.m34 = 1.0/-900.0; 
     self.view.layer.transform = transform2; 
     layer2.transform = CATransform3DMakeRotation(-M_PI/2, 0.0f, 1.0f, 0.0f); 
     self.view.layer.transform = transform2; 
     transform2 = CATransform3DRotate(transform2, -M_PI, 0.0f, 1.0f, 0.0f); 
     animateImage2.repeatCount = 1.0; 
     animateImage2.toValue = [NSValue valueWithCATransform3D: transform2]; 
     animateImage2.duration = 0.5; 
     animateImage2.fillMode = kCAFillModeForwards; 
     animateImage2.removedOnCompletion = NO; 
     [layer2 addAnimation: animateImage2 forKey: @"halfAnimatedImage"]; 

     return; 
    } 
} 

-(void) rotateView1 
{ 
    UIImageView *firstImage=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton]; 
    CALayer *layer = firstImage.layer; 
    layer.anchorPoint = CGPointMake(0.5f, 0.5f); 
    CABasicAnimation *animateImage = [CABasicAnimation animationWithKeyPath: @"transform"]; 
    CATransform3D transform = CATransform3DIdentity; 
    transform.m34 = 1.0/-900.0; 
    self.view.layer.transform = transform; 
    layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f); 
    [animateImage setDelegate:self ]; 
    animateImage.repeatCount = 0.5; 
    animateImage.toValue = [NSValue valueWithCATransform3D: transform]; 
    animateImage.duration = 0.5; 
    animateImage.fillMode = kCAFillModeForwards; 
    animateImage.removedOnCompletion = NO; 
    animateImage.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    [animateImage setValue:@"SecondImage" forKey:@"halfAnimatedImage"]; 
    [layer addAnimation: animateImage forKey: @"halfAnimatedImage"]; 
} 
-(void) rotateView2 
{ 
    UIImageView *firstImage=(UIImageView *)[self.view viewWithTag:numberOfCurrentButton]; 
    CALayer *layer = firstImage.layer; 
    layer.anchorPoint = CGPointMake(0.5f, 0.5f); 
    CABasicAnimation *animateImage = [CABasicAnimation animationWithKeyPath: @"transform"]; 
    CATransform3D transform = CATransform3DIdentity; 
    transform.m34 = 1.0/-900.0; 
    self.view.layer.transform = transform; 
    layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f); 
    [animateImage setDelegate:self ]; 
    animateImage.repeatCount = 0.5; 
    animateImage.toValue = [NSValue valueWithCATransform3D: transform]; 
    animateImage.duration = 0.5; 
    animateImage.fillMode = kCAFillModeForwards; 
    animateImage.removedOnCompletion = NO; 
    animateImage.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    [animateImage setValue:@"SecondImage" forKey:@"halfAnimatedImage"]; 
    [layer addAnimation: animateImage forKey: @"halfAnimatedImage"]; 
} 
-(IBAction) buttonRefresh:(UIButton *)sender 
{ 
    numberOfCurrentButton=1; 
    [self rotateView1]; 
    numberOfCurrentButton=2; 
    [self rotateView2]; 
} 
-(IBAction)buttonClicked:(UIButton *)sender 
{ 
    [self buttonRefresh:sender]; 

} 

`

+0

你可能想在你的问题一些代码来显示到目前为止,你已经尝试过什么,也许有些图像以图形方式描述你”试图做? –

+0

@MichaelDautermann我上传程序的代码。 action buttonClicked用于两个UIButton。我想,当点击第二个UIButton时,buttonRefresh动作开始并旋转两个按钮。 – user1114232

+0

由于rotateView1和rotateView2是相同的,那将是更容易地创建一个新的' - (空)rotateViewWithTag:(NSInteger的)标签{'方法.... – lnafziger

回答

1

按我的理解,你buttonClicked行动收到发件人(UIButton的所单击),你旋转一样。

要旋转两种,你可以做以下任一操作:

  1. 两个按钮创建一个IBOutlet(不IBAction为)。在您的rotateButtons方法中,不要只是旋转发件人UIButton,同时旋转这两个按钮。
  2. 如所建议的通过@lnafziger以上,标签都与在XIB数字的按钮。在rotateButtons方法中旋转这两个按钮。您可以通过使用下面的代码获取每个的UIButton:

    UIbutton *button1 = (UIButton *)[self.view viewWithTag:101]; 
    
+0

你明白我的ploblem,我认为你的建议(1号)与IBOutlet中似乎是最好的。我会尽力而且会告诉你。 – user1114232

+0

很高兴我能帮到你。它对你有用吗? – chirag

+0

是的,我使用IBOutlet,它工作。谢谢。 – user1114232

相关问题