簡體   English   中英

對象停止移動-UIDynamics和Swift iOS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM