我正在尝试在代码中延迟实例化 UIDynamicAnimator 。我想用 UIView 作为我拥有的 IBOutlet 来初始化它。
class ViewController: UIViewController {
@IBOutlet var gameView : UIView
@lazy var animator = UIDynamicAnimator(referenceView: gameView)
...
我假设这不起作用,因为 UIView 尚未创建,因为动画器属性会返回一个错误,指出找不到 gameView。
我该如何解决这个问题?
最佳答案
在 session 视频“构建可中断和响应式交互”中,他们正是这样做的。
解决方案是将animator
定义为Optional并在viewDidLoad
内初始化它。
class ViewController: UIViewController {
var animator : UIDynamicAnimator?
@IBOutlet var gameView : UIView
override func viewDidLoad() {
super.viewDidLoad()
animator = UIDynamicAnimator(referenceView: gameView)
animator!.property = value
...
}
...
我有点不喜欢这个,因为将来对 animator
的引用都需要解开它。
在我看来,一个稍微更好的方法是将其定义为隐式解包的可选。所以它看起来像这样:
class ViewController: UIViewController {
var animator : UIDynamicAnimator!
@IBOutlet var gameView : UIView
override func viewDidLoad() {
super.viewDidLoad()
animator = UIDynamicAnimator(referenceView: gameView)
animator.property = value
...
}
...
关于ios - 使用 ReferenceView 延迟实例化 UIDynamicAnimator - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303062/