gpt4 book ai didi

ios - UICollisionBehavior 仅在第一次添加后起作用

转载 作者:行者123 更新时间:2023-11-28 08:52:52 27 4
gpt4 key购买 nike

我的应用程序有一个自定义的 UIButton,它有两个 subview ,它们看起来像是被绳子挂起来了。当用户点击按钮时,一个会被拉回,然后与另一个发生碰撞。这在第一次碰撞时对我有用,但是当我第二次点击时,该项目不会被拉回。

在第一次调用 layoutSubviews() 时,我将两个 View 都添加到一个 UIGravityBehavior 中,并为它们分别提供了自己的 UIAttachmentBehavior。在 touchesBegan 上,我在需要拉回的 View 附近添加了一个碰撞,然后在 touchesEnded 上或在计时器之后(如果是点击而不是长按)按下,我移除了将它固定到位的碰撞。

我将该碰撞存储在一个实例变量中(因此它被保留),并像这样创建它:

    holdCollision = UICollisionBehavior(items: [theView])
holdCollision.addBoundaryWithIdentifier("boundary suspending item in air",
forPath: UIBezierPath(rect: holdCollisionViewFrame))

如果我构造一次 UICollisionBehavior,然后多次调用 addBehaviorremoveBehavior,它只会在第一次起作用。如果我在每次点击时从头开始构建它,它总是有效的。可能是什么原因造成的?

更新:我提出了一个向 Apple 报告的示例项目。您可以在干净的单 View iOS 项目中重现。添加两个 View ,一个在另一个之上,并链接到顶部的导出。顶部 View 需要足够大,以便在首次启动时与底部 View 重叠,否则您将看不到问题。添加两个按钮并连接到底部的操作。

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)
}
}

最佳答案

看起来在我从 UIDynamicAnimator 中删除 holdCollision 之后,它失去了边界列表。这似乎是一个错误,我也是这样报告的。这是rdar://23593048如果有人想欺骗。

关于ios - UICollisionBehavior 仅在第一次添加后起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com