iOS – 使用两个不同的UIButtons左右旋转图层

我使用CALayer创build了一个图层,并使用旋转animation使用CABasicanimation为其创build了一个图层,并创build了两个TouchDown UIButtons来左右旋转它,当图层旋转到右侧时,出现问题,它恢复到原始angular度,左旋

这是我的代码:

-(void)viewDidLoad { //Button 1 UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.frame = CGRectMake(0, 0, 145, 145); aButton.center = CGPointMake(90, 190); aButton.backgroundColor = [UIColor redColor]; [aButton addTarget:self action:@selector(holdDown) forControlEvents:UIControlEventTouchDown]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpOutside]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:aButton]; //Button 2 UIButton *bButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; bButton.frame = CGRectMake(0, 0, 145, 145); bButton.center = CGPointMake(690, 190); bButton.backgroundColor = [UIColor redColor]; [bButton addTarget:self action:@selector(holddDown) forControlEvents:UIControlEventTouchDown]; [bButton addTarget:self action:@selector(holdReleasee) forControlEvents:UIControlEventTouchUpOutside]; [bButton addTarget:self action:@selector(holdReleasee) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:bButton]; } -(void)holddDown{ animaEQ = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; animaEQ.toValue = [NSNumber numberWithFloat:5]; animaEQ.removedOnCompletion = NO; animaEQ.repeatCount= HUGE_VAL; animaEQ.duration = 2.2f; [equaMi addAnimation:animaEQ forKey:@"blls"]; } -(void)holdReleasee{ [equaMi removeAnimationForKey:@"blls"]; } - (void)holdDown { animaEQl = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; animaEQl.toValue = [NSNumber numberWithFloat:-5]; animaEQl.removedOnCompletion = NO; animaEQl.repeatCount= HUGE_VAL; animaEQl.duration = 2.2f; [equaMi addAnimation:animaEQl forKey:@"bls"]; } - (void)holdRelease { [equaMi removeAnimationForKey:@"bls"]; } 

请帮忙吗?

提前致谢

它正在返回到原来的angular度,因为holdRelease方法删除了animation,还原了图层的位置。

使用CAD显示链接可以轻松地手动旋转图层。

 @implementation ViewController { CADisplayLink *timer; } -(void)viewDidLoad { //Button 1 UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.frame = CGRectMake(0, 0, 145, 145); aButton.center = CGPointMake(90, 190); aButton.backgroundColor = [UIColor redColor]; aButton.tag = 0; [aButton addTarget:self action:@selector(holdDown:) forControlEvents:UIControlEventTouchDown]; [aButton addTarget:self action:@selector(holdRelease:) forControlEvents:UIControlEventTouchUpOutside]; [aButton addTarget:self action:@selector(holdRelease:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:aButton]; //Button 2 UIButton *bButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; bButton.frame = CGRectMake(0, 0, 145, 145); bButton.center = CGPointMake(690, 190); bButton.backgroundColor = [UIColor redColor]; bButton.tag = 1; [bButton addTarget:self action:@selector(holdDown:) forControlEvents:UIControlEventTouchDown]; [bButton addTarget:self action:@selector(holdRelease:) forControlEvents:UIControlEventTouchUpOutside]; [bButton addTarget:self action:@selector(holdRelease:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:bButton]; } - (void)holdDown:(UIButton*)sender { //check which button was pressed rotateLeft = (sender.tag == 0); //start the timer if (!timer) { timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotate)]; timer.frameInterval = 1.0f; [timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; } } - (void)holdRelease:(UIButton*)sender { //end the timer [timer invalidate]; timer = Nil; } -(void)rotate { //create the rotation transform based on current rotation and button pressed static int i; if (rotateLeft) { i++; } else { i--; } float rotation = (M_PI/60)*i; //disable implicit animations [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; //rotate the layer CGAffineTransform transform = CGAffineTransformMakeRotation(rotation); equaMi.affineTransform = transform; [CATransaction commit]; }