代码很简单。视图中有一个按钮,在用户点击按钮的运行时间内,该按钮将向下移动20个点。
viewController有一个IBOutlet和一个IBAction,它们都连接到界面构建器中的按钮
以下是viewControleller的代码
class viewController : UIViewController {
@IBOutlet weak var myButton: UIButton!
@IBAction func moveMyButton(_ sender: Any) {
func whatToAnimate() {
self.myButton.frame.origin.y += 20
}
func whatToDoLater(finished: Bool){
print("finished: \(finished)") //who passed the "true" value to the finished variable
}
UIView.animate(withDuration: 0.4,
animations: whatToAnimate,
completion: whatToDoLater)
}
}
在运行时调用 动画 函数时,函数 whatToDoLater() - > void 作为参数传递到 animate 方法中。
字符串"完成:true"用户点击按钮时在控制台中打印
问题:
谁传递了布尔值" true"到whatToDoLater函数的参数完成?我想我没那样做。它背后的机制是什么?
感谢您的时间
答案 0 :(得分:1)
UIView animate
方法传递参数,因为它调用完成处理程序。
使用完成处理程序可以看到此模式。无论实际调用什么,完成处理程序还负责将正确的参数值传递给完成处理程序。