首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollisionBehavior只在第一次添加之后才能工作

UICollisionBehavior只在第一次添加之后才能工作
EN

Stack Overflow用户
提问于 2015-11-17 23:26:05
回答 1查看 414关注 0票数 1

我的应用程序有一个定制的UIButton,它有两个子视图,看起来像是被字符串挂起的。当用户点击按钮时,其中一个被拉回,然后与另一个发生碰撞。这是对我的第一次碰撞,但当我去点击第二次,该项目不会被撤回。

在第一次调用layoutSubviews()时,我将这两个视图添加到UIGravityBehavior中,并为每个视图提供各自的UIAttachmentBehavior。在touchesBegan上,我在视图旁边添加了一个冲突,该视图需要被撤回,然后在touchesEnded上或者计时器之后,如果它是一个抽头而不是一个长按压,我就移除保持其位置的碰撞。

我将冲突存储在一个实例变量中(因此它被保留了),并按照如下方式创建它:

代码语言:javascript
复制
    holdCollision = UICollisionBehavior(items: [theView])
    holdCollision.addBoundaryWithIdentifier("boundary suspending item in air",
        forPath: UIBezierPath(rect: holdCollisionViewFrame))

如果我构造UICollisionBehavior一次,然后使用它多次调用addBehaviorremoveBehavior,那么它只在第一次工作。如果我在每个水龙头上从头开始构建它,它总是能工作的。是什么导致了这一切?

更新:I提出了一个向苹果报告的示例项目。您可以在一个干净的单视图iOS项目中进行复制。添加两个视图,一个对另一个,并链接到插座在顶部。顶部视图需要足够大,以便在第一次启动时与底部视图重叠,否则您将不会看到问题。添加两个按钮并连接到底部的操作。

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var topView: UIImageView!
    @IBOutlet weak var bottomView: UIView!

    var animator: UIDynamicAnimator!
    var collision: UICollisionBehavior!

    override func viewDidLoad() {
        super.viewDidLoad()

        animator = UIDynamicAnimator(referenceView: view)

        let gravity = UIGravityBehavior(items: [topView])
        animator.addBehavior(gravity)

        var anchor = view.center
        anchor.y -= 100

        let attachment = UIAttachmentBehavior(item: topView, attachedToAnchor: anchor)
        animator.addBehavior(attachment)

        collision = UICollisionBehavior(items: [topView])
        collision.addBoundaryWithIdentifier("bottom boundary", forPath: UIBezierPath(rect: bottomView.frame))
    }

    @IBAction func addCollision() {
        NSLog("boundaries: \(collision.boundaryIdentifiers)")
        animator.addBehavior(collision)
    }

    @IBAction func removeCollision() {
        animator.removeBehavior(collision)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 13:58:48

看起来,在我从holdCollision中删除UIDynamicAnimator之后,它就失去了它的边界列表。那好像是个窃听器,我也是这样报告的。如果有人想骗我,那就是雷达://23593048

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

https://stackoverflow.com/questions/33769021

复制
相关文章

相似问题

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