【问题标题】:How can I add gravity to UIButton SWIFT如何向 UIButton SWIFT 添加重力
【发布时间】:2015-07-31 01:54:55
【问题描述】:

所以我试图将重力添加到 4 个 UIButtons 但它们没有下降,我将此代码添加到确实加载的视图中,我不知道为什么这不能正常工作。 这是代码:

//initialize the animator
    var animator = UIDynamicAnimator(referenceView: self.view)
    //add gravity
    let gravity = UIGravityBehavior(items: [redButton!, greenButton!, blueButton!, cameraButton!])
    let direction = CGVectorMake(0.0, 1.0)
    gravity.gravityDirection = direction
    animator.addBehavior(gravity)

我的按钮是 redButton、greenButton、blueButton 和 cameraButton,我还应用了秋天的方向,但是当我运行应用程序时,它们只是静态的。那么是否可以向 UIButtons 添加重力?

【问题讨论】:

    标签: swift uibutton gravity


    【解决方案1】:

    您在函数本地声明您的动画师。当函数返回时,动画器从内存中释放,所有动画停止(实际上viewDidLoad() 在生命周期的早期返回,以至于动画永远不会开始)。

    声明为:

    var animator: UIDynamicAnimator!
    

    范围

    类作用域意味着把它放在类的花括号内:

    class Foo {
        var thisVariableIsAtClassScopeAndPersistsAcrossMethods: Int
    
        func bar() {
            var thisVariableIsAtLocalScopeAndDisappearsWhenFunctionReturns: String
        }
    }
    

    并且只在viewDidLoad()中初始化它:

    animator = UIDynamicAnimator(referenceView: self.view)
    

    (如果没有 lazy 技巧,您无法在类范围内初始化它,因为 self 尚不可用。)

    ** 编辑最终答案 **

    聊天后,我们解决了误解的答案,现在我们有:

    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var redButton: UIButton!
        @IBOutlet weak var greenButton: UIButton!
        @IBOutlet weak var blueButton: UIButton!
        @IBOutlet weak var cameraButton: UIButton!
    
        // Declare the animator at class scope so it doesn't get released prematurely.
        var animator: UIDynamicAnimator!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            //add gravity
            let gravity = UIGravityBehavior(items: [redButton, greenButton, blueButton, cameraButton])
            let direction = CGVectorMake(0.0, 1.0)
            gravity.gravityDirection = direction
            animator.addBehavior(gravity)
    
            // other viewDidLoad setup code to set attributes of buttons
        }
    }
    

    【讨论】:

    • 当我添加 bang 运算符时,它会显示删除它的错误@BaseZen
    • 没关系。它只是意味着一个隐式展开的 Optional。很普通的。它在 Xcode 6.4/Swift 1.2 中编译和工作。你在做一些有趣的事情。你了解班级范围吗?错误到底说了什么?
    • “!”不是运算符。它是类型声明的一部分。
    • 不,我不明白什么是类范围,我是一个新的 swift 和编程哈哈
    • 所以它就在viewDidLoad之外?而且我没有得到“懒惰”
    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多