[英]Objects stop moving - UIDynamics and Swift iOS
我試圖將重力添加到一組按鈕上,以使設備傾斜時它們在屏幕上移動。 物體會移動,只要設備始終處於運動狀態,它們就會一直移動,但是一旦設備靜止至少1秒鍾,它們就會完全停止移動,並且即使在此之后我移動設備也要堅持到邊緣。
這是我的代碼:
在ViewController.Swift中
var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
var collision: UICollisionBehavior!
var motionManager = CMMotionManager()
var motionQueue = NSOperationQueue()
let itemBehavior = UIDynamicItemBehavior()
這兩個稱為int in ViewDidLoad()
func addBehaviours (){
animator = UIDynamicAnimator(referenceView: view)
gravity = UIGravityBehavior(items: [emailButton,facebookButton])
animator.addBehavior(gravity)
itemBehavior.friction = 0.1;
itemBehavior.elasticity = 0.5
animator?.addBehavior(itemBehavior)
collision = UICollisionBehavior(items: [emailButton, facebookButton])
collision.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collision)
itemBehavior.addItem(emailButton)
itemBehavior.addItem(facebookButton)
}
func updateMotion () {
motionManager.startDeviceMotionUpdatesToQueue(motionQueue) { (motion: CMDeviceMotion?, error: NSError?) -> Void in
self.gravity.gravityDirection = CGVectorMake(CGFloat((motion?.gravity.x)!), -CGFloat((motion?.gravity.y)!))
}
}
首先,通過將運動管理器的deviceMotionUpdateInterval
設置為deviceMotionUpdateInterval
0.2
(即,比動畫師的幀頻少deviceMotionUpdateInterval
來降低更新率。 然后,更改此行:
motionManager.startDeviceMotionUpdatesToQueue(motionQueue) { // ...
對此:
motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) { // ...
您計划在處理程序中執行的所有操作都涉及與動畫師或其盟友進行對話(即重力行為),而這需要在主線程上完成。 因此,沒有必要像現在那樣在后台隊列上接收更新,因為無論如何您都需要立即進入主線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.