如何停止UIView动画。

26

我在一个UIScrollView中有几个UIImageViews,当用户长按其中一个时,我想要让它们摇晃。就像当你在iPad / iPhone菜单中长按图标时得到的行为一样。

所以我有以下代码:

- (void)startWiggling {

    for (UIImageView *touchView in [scrollView subviews]) {

        [UIView beginAnimations:@"wiggle" context:nil];
        [UIView setAnimationDuration:0.1];
        [UIView setAnimationRepeatAutoreverses:YES];
        [UIView setAnimationRepeatCount:FLT_MAX];

        //wiggle 1 degree both sides
        touchView.transform = CGAffineTransformMakeRotation();
        touchView.transform = CGAffineTransformMakeRotation(-0.0174532925);

        [UIView commitAnimations];

    }    

}

- (void)stopWiggling {
    NSLog(@"Stop wiggling");    
}

这段代码可以正常工作。问题是... 用户按下按钮后,如何使其停止晃动?我有一个按钮并已将其连接等等,并且它正在调用stopWiggling方法,所以这没问题。但是...

  1. 我如何从这些 UIImageViews 中删除 UIView 动画?
  2. 我能将此操作绑定到用户按下设备上的主页按钮吗?

不确定如何回答第一部分,但按下Home按钮将导致应用程序终止并返回主屏幕。没有办法绑定该键,因为它由系统保留。 - Suhail Patel
@Suhail Patel 我知道,但我认为可能有一种方法可以覆盖 applicationDidEnterBackground 方法并检查图像是否在摇晃。如果是这样,就停止摇晃并取消应用程序进入后台模式。但我不知道是否可能。 - Jules
你无法阻止它进入后台,但可以在该方法中停止抖动。它不会给你选择的选项... - Suhail Patel
我认为在2018年最好的方法是使用UIViewPropertyAnimator。 - marczellm
1个回答

73
 #import <QuartzCore/QuartzCore.h>

那么

 [myView.layer removeAllAnimations];
或者
[self.view.layer removeAllAnimations]; 

1
是的,你说得对。我知道removeAllAnimations方法,但我甚至没有尝试过,因为我没有将动画放在视图的层上,而是放在了视图本身上。但令人惊讶的是,这确实起作用了.. =/ - Jules
问题在于,如果您希望在同一层上恢复动画,则无法再次正常工作,因为该层已删除所有动画。 - Waris Ali
1
要恢复和暂停动画,您可以查看此链接 https://developer.apple.com/library/ios/qa/qa1673/_index.html。 - Vijay-Apple-Dev.blogspot.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接