簡體   English   中英

UICollisionBehavior僅在第一次添加后才能工作

[英]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一次,然后調用addBehaviorremoveBehavior它多次,它僅適用第一次。 如果我在每次點擊時從頭開始構建它,它將始終有效。 是什么原因造成的?

更新:我想出了一個向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM