我无法为这种代码风格找到动画完成处理程序/函数。
我没有使用动画块,只要动画完成就有完成功能,因为我需要控制重复过程。
我需要做的是如果完成此动画,图像应为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()
}
答案 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"。这在任何可能的背景下都没有用。