ios - 使用 ReferenceView 延迟实例化 UIDynamicAnimator - Swift

标签 ios swift lazy-initialization uidynamicanimator

我正在尝试在代码中延迟实例化 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/

相关文章:

ios - 在 Swift 中通过委托(delegate)关闭 View Controller

ios - Swift 分组 UITableView 最佳实践

c# - 有没有必要让存储库变得懒惰?

c# - 在这种情况下,使用 .Net Lazy 类是否有点矫枉过正?

objective-c - 从传递 float 组的 C 函数调用 Objective C 函数

ios - 无法点击嵌入在 UIPageViewController (ScrollStyle) 中的 UITableView - didSelectRowAtIndexPath 未触发

从锁定屏幕接听电话时,iOS 麦克风无法正常工作或无法通过 webrtc 发送语音

ios - 如何在 UITextView URL 中允许表情符号

rust - 如何在另一个 once_cell::sync::Lazy 中使用 once_cell::sync::Lazy?

ios - 调用中缺少参数 ‘coder’ 的参数