1

我有两个 UIButtons,我想先在 Number1 中单击UIButton,然后在 Number 2中单击UIButton。单击第二个后,UIButton我希望两个UIButton's 自动旋转。我CABasicAnimation用来旋转它们。两者UIButtonbuttonClicked动作相同。这两个按钮使用不同的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];

}

`

4

1 回答 1

1

根据我的理解,您的 buttonClicked 操作接收发送者(被点击的 UIButton)并且您旋转相同。

要旋转两者,您可以执行以下任一操作:

  1. 为这两个按钮创建一个 IBOutlet(不是 IBAction)。在您的 rotateButtons 方法中,不仅要旋转发送方 UIButton,还要旋转这两个按钮。
  2. 正如上面@lnafziger 所建议的,在XIB 中用数字标记两个按钮。在 rotateButtons 方法中旋转这两个按钮。您可以使用以下代码获取每个 UIButton:

    UIbutton *button1 = (UIButton *)[self.view viewWithTag:101];
    
于 2012-05-27T03:55:57.627 回答