因此,我尝试向4个UIButton添加重力,但它们并未下降,我将此代码添加到确实加载的视图中,我不明白为什么它不能很好地工作。这是代码:
//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添加重力吗?
您是在本地为函数声明动画制作器。当函数返回时,动画器会从内存中释放,并且所有动画都将停止(实际上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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句