[英]UICollisionBehavior only works after adding the first time
我的應用程序有一個帶有兩個子視圖的自定義UIButton,兩個子視圖看起來像是按字符串懸掛的。 當用戶點擊按鈕時,其中一個被拉回,然后與另一個碰撞。 這在第一次碰撞時為我工作,但是當我第二次點擊時,該物品不會被拉回。
在第一次調用layoutSubviews()
,我將兩個視圖都添加到UIGravityBehavior
,並給它們各自分配了自己的UIAttachmentBehavior
。 在touchesBegan
,我在需要拉回的視圖旁邊添加了一個碰撞,然后在touchesEnded
或計時器之后(如果是輕按而不是長按),則刪除了將其固定在適當位置的碰撞。
我將該碰撞存儲在一個實例變量中(因此將其保留),並按如下方式創建它:
holdCollision = UICollisionBehavior(items: [theView])
holdCollision.addBoundaryWithIdentifier("boundary suspending item in air",
forPath: UIBezierPath(rect: holdCollisionViewFrame))
如果我構建UICollisionBehavior
一次,然后調用addBehavior
和removeBehavior
它多次,它僅適用第一次。 如果我在每次點擊時從頭開始構建它,它將始終有效。 是什么原因造成的?
更新:我想出了一個向Apple報告的示例項目。 您可以在干凈的單視圖iOS項目中重現。 添加兩個視圖,一個在另一個視圖上,然后鏈接到頂部的出口。 頂視圖必須足夠大,以使其在首次啟動時與底視圖重疊,否則您將看不到問題。 添加兩個按鈕並連接到底部的操作。
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
UIDynamicAnimator
,它似乎失去了邊界列表。 那似乎是一個錯誤,我就這樣報告了。 如果有人要欺騙, 則為rdar:// 23593048 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.