如何连续旋转UIButton并能够停止它?

Mar*_*rio 12 iphone animation cocoa-touch

我想连续旋转UIButton,以表明应用正在录制某些内容.这是一个好主意吗.我也希望能够阻止这种连续旋转.

我如何使用动画来做到这一点?

Abi*_*ern 35

使用UIView动画方法:

animateWithDuration:delay:options:animations:completion:
Run Code Online (Sandbox Code Playgroud)

并使用该选项 UIViewAnimationOptionRepeat

例如,对于UIButton *名为的插座button:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveLinear animations:^{
        CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);
        self.button.transform = transform;
    } completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)

由于它是圆形的,我只是用pi弧度而不是2pi旋转它.你可以使用你想要的任何角度.

编辑

要停止动画,只需从当前状态开始创建另一个持续时间较短的动画,例如

- (void)stopRotating {
    [UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveLinear animations:^{
        CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI * 0.05);
        self.button.transform = transform;
    } completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)

这提供了一个非常短的动画,它覆盖了当前的动画.注意,变换的角度乘以0.05,这是0.1/2.0的比率,这意味着该小段的旋转速度与连续旋转速度相同.

  • @EshwarChaitanya如果你想在动画块中允许用户交互,那么在选项中添加`UIViewAnimationOptionAllowUserInteraction`. (2认同)

Nik*_*dav 6

尝试以下可以帮助您的代码,因为我成功运行了该代码.

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"Show View" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [self.view addSubview:button];

    CABasicAnimation *halfTurn;
    halfTurn = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    halfTurn.fromValue = [NSNumber numberWithFloat:0];
    halfTurn.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
    halfTurn.duration = 0.5;
    halfTurn.repeatCount = HUGE_VALF;
    [[button layer] addAnimation:halfTurn forKey:@"180"];
Run Code Online (Sandbox Code Playgroud)

  • 那不会半转,它会转一圈.(360*M_PI)/ 180 == 2*M_PI,其中,角度为弧度,实际上是一个完整的旋转. (2认同)