完成处理程序或此动画风格的功能

时间:2015-04-23 21:43:45

标签: swift animation uiviewanimation

我无法为这种代码风格找到动画完成处理程序/函数。

我没有使用动画块,只要动画完成就有完成功能,因为我需要控制重复过程。

我需要做的是如果完成此动画,图像应为removeFromSuperView()。这个有解决方法吗?

@IBAction func buttonPressed() {
    var repeatCount = Float(10.0)
    var duration = 2.0

    //if finished, remove image using image.removeFromSuperview()

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(duration)
    UIView.setAnimationRepeatCount(repeatCount)
    image.frame = CGRectMake(160, 300, 50, 50)
    UIView.commitAnimations()
}

2 个答案:

答案 0 :(得分:3)

您不应该使用旧式beginAnimations / commitAnimations结构。但是如果你打算使用它,那么只需给动画一个setAnimationDelegate:的委托,并指定一个选择器,当动画以setAnimationDidStopSelector:结束时调用,正如我在这里描述的那样:

http://www.apeth.com/iOSBook/ch17.html#_modifying_an_animation_block

答案 1 :(得分:0)

你真的应该使用基于块的动画;但是如果必须,在提交动画之前设置委托和回调,由其他setAnimationXXX函数声明为正确。

// no getters. if called outside animation block, these setters have no effect.
class func setAnimationDelegate(delegate: AnyObject?) // default = nil
class func setAnimationWillStartSelector(selector: Selector) // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context
class func setAnimationDidStopSelector(selector: Selector) // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

此外,您在此处宣布

    [UIView.beginAnimations(nil, context: nil)]

是"一个包含beginAnimations结果的数组,它是Void"。这在任何可能的背景下都没有用。