左右旋转一层使用两个不同的UIButtons
我使用CALayer创建了一个图层,并使用带旋转动画的CABasicanimation对其进行了动画处理,并创建了两个TouchDown UIButtons来左右旋转它,当图层旋转到右侧时它会回到原始角度,并且与左旋转相同
这是我的代码:
-(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"];
}
请帮忙吗?
提前致谢
它将返回原始角度,因为holdRelease方法删除动画,还原图层的位置。
使用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];
}
上一篇: Rotate a layer right and left using two different UIButtons
下一篇: Positioning of a running animation on orientation change
