首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIGravityBehavior在移动项目后不起作用

UIGravityBehavior在移动项目后不起作用
EN

Stack Overflow用户
提问于 2016-02-20 14:39:13
回答 1查看 134关注 0票数 0

当我启动我的应用程序时,我看到UILabel掉下来了,然后我把它移到上面,它就停留在那里。为什么它不会掉下来?如何在移动元素后制作GravityBehavior?

代码语言:javascript
复制
 class ViewController: UIViewController
    {
        var helloWorldLabel: UILabel!
        var panGestureRecognizer: UIPanGestureRecognizer!
        var animator: UIDynamicAnimator!

        override func viewDidLoad()
        {
            super.viewDidLoad()
            var str:NSString = "Hello World"
            let labelFrame = CGRect(x: 0, y: 0, width:200, height: 100);
            helloWorldLabel = UILabel(frame: labelFrame)
            helloWorldLabel.userInteractionEnabled = true
            helloWorldLabel.text = str as String
            helloWorldLabel.frame = labelFrame;
            helloWorldLabel.backgroundColor = UIColor.grayColor()
            helloWorldLabel.center = view.center
            view.addSubview(helloWorldLabel)
            panGestureRecognizer = UIPanGestureRecognizer(target: self,action: "handlePanGestures:")
            helloWorldLabel.addGestureRecognizer(panGestureRecognizer)
            animator = UIDynamicAnimator(referenceView: view)
            let collisionBehavior = UICollisionBehavior(items: [helloWorldLabel])
            collisionBehavior.translatesReferenceBoundsIntoBoundary = true
            animator.addBehavior(collisionBehavior)
            let gravityBehavior =  UIGravityBehavior(items: [helloWorldLabel])
            animator.addBehavior(gravityBehavior)

        }

        func handlePanGestures(sender: UIPanGestureRecognizer)
        {
            if sender.state != .Ended && sender.state != .Failed
            {
                let location = sender.locationInView(sender.view!.superview!)
sender.view!.center = location
            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-05-12 18:16:13

你所做的一切都是对的,你唯一需要改变的是,一旦pangesture状态结束,你必须添加重力行为again.Code,我已经修改了下面的内容

代码语言:javascript
复制
class JsonParser: UIViewController {

var animator: UIDynamicAnimator!
var helloWorldLabel: UILabel!
var panGestureRecognizer: UIPanGestureRecognizer!

override func viewDidLoad() {
    super.viewDidLoad()
    let str:NSString = "Hello World"
    let labelFrame = CGRect(x: 0, y: 0, width:200, height: 100);
    helloWorldLabel = UILabel(frame: labelFrame)
    helloWorldLabel.userInteractionEnabled = true
    helloWorldLabel.text = str as String
    helloWorldLabel.frame = labelFrame;
    helloWorldLabel.backgroundColor = UIColor.grayColor()
    helloWorldLabel.center = view.center
    view.addSubview(helloWorldLabel)
    panGestureRecognizer = UIPanGestureRecognizer(target: self,action: "handlePanGestures:")
    helloWorldLabel.addGestureRecognizer(panGestureRecognizer)
    animator = UIDynamicAnimator(referenceView: view)
    AddCollisionAndGravity()

func AddCollisionAndGravity () {
    animator.removeAllBehaviors()

    let collisionBehavior = UICollisionBehavior(items: [helloWorldLabel])
    collisionBehavior.translatesReferenceBoundsIntoBoundary = true
    animator.addBehavior(collisionBehavior)
    let gravityBehavior =  UIGravityBehavior(items: [helloWorldLabel])
    animator.addBehavior(gravityBehavior)

}

func handlePanGestures(sender: UIPanGestureRecognizer)
{
    if sender.state != .Ended && sender.state != .Failed
    {
        let location = sender.locationInView(sender.view!.superview!)
        sender.view!.center = location
    }else if sender.state == UIGestureRecognizerState.Ended{

       AddCollisionAndGravity()
    }
}

上面的代码将满足您的期望。最佳实践是在添加新的行为之前从动画制作animator.removeAllBehaviors()中删除以前的行为。我希望这会对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35520055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档