如何为 UIButton 添加引力 SWIFT
How can I add gravity to UIButton SWIFT
所以我正在尝试为 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 添加引力?
您正在向函数本地声明您的动画师。当函数 returns 时,动画器从内存中释放,所有动画停止(实际上 viewDidLoad()
returns 在生命周期的早期,动画永远不会开始)。
声明为:
var animator: UIDynamicAnimator!
在class范围
Class 范围意味着把它放在 class:
的大括号内
class Foo {
var thisVariableIsAtClassScopeAndPersistsAcrossMethods: Int
func bar() {
var thisVariableIsAtLocalScopeAndDisappearsWhenFunctionReturns: String
}
}
并且只在viewDidLoad()
初始化:
animator = UIDynamicAnimator(referenceView: self.view)
(如果没有 lazy
技巧,您无法在 class 范围内初始化它,因为 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
}
}
所以我正在尝试为 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 添加引力?
您正在向函数本地声明您的动画师。当函数 returns 时,动画器从内存中释放,所有动画停止(实际上 viewDidLoad()
returns 在生命周期的早期,动画永远不会开始)。
声明为:
var animator: UIDynamicAnimator!
在class范围
Class 范围意味着把它放在 class:
的大括号内class Foo {
var thisVariableIsAtClassScopeAndPersistsAcrossMethods: Int
func bar() {
var thisVariableIsAtLocalScopeAndDisappearsWhenFunctionReturns: String
}
}
并且只在viewDidLoad()
初始化:
animator = UIDynamicAnimator(referenceView: self.view)
(如果没有 lazy
技巧,您无法在 class 范围内初始化它,因为 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
}
}