【发布时间】:2012-05-26 21:17:29
【问题描述】:
我有两个 UIButton,我想先点击 Number1 UIButton,然后点击 Number 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];
}
`
【问题讨论】:
-
您可能希望在您的问题中包含一些代码以显示您迄今为止所做的尝试,或者一些图像以图形方式描述您正在尝试做什么?
-
@MichaelDautermann 我上传了程序的代码。动作 buttonClicked 用于两个 UIButton。我希望,当单击第二个 UIButton 时,启动 buttonRefresh 操作并旋转两个按钮。
-
由于 rotateView1 和 rotateView2 是相同的,创建一个新的
-(void)rotateViewWithTag:(NSInteger)tag {方法会更容易......
标签: ios ios5 uikit core-animation