【发布时间】:2024-01-21 11:45:01
【问题描述】:
我正在尝试为一组按钮添加重力,以便它们在设备倾斜时在屏幕上移动。物体会移动,只要设备始终处于运动状态,它们就会继续移动,但是一旦设备静止至少 1 秒钟,它们就会完全停止移动,并且即使在那之后我移动设备,它们也会粘在边缘。
这是我的代码:
在 ViewController.Swift 中
var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
var collision: UICollisionBehavior!
var motionManager = CMMotionManager()
var motionQueue = NSOperationQueue()
let itemBehavior = UIDynamicItemBehavior()
这两个在 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)!))
}
}
【问题讨论】:
-
@matt 我看过那个问题,那里没有答案。我可以降低方向变化的速度,但我查看了一个在线教程,它在那里运行良好。我进行了测试,动画师确实在他们停止移动的那一点停下来,但在那之后继续运行。
-
@matt 我刚刚试了一下,但没有成功。我也尝试过重新启动动画师,但找不到这样做的方法。我还注意到,即使设备平放且不动,也会发生这种情况。只有当动画师停止后,它就不再起作用了
标签: ios swift gravity motion uikit-dynamics