UIKit 動力學

使用 UIKit Dynamics 時要記住的一個重要事項是動畫師定位的檢視無法通過其他常見的 iOS 佈局方法輕鬆定位。

UIKit Dynamics 的新人經常在這個重要的警告中掙扎。將約束放在也是 UIDynamicBehavior 的專案的檢視上可能會引起混淆,因為自動佈局引擎和動態動畫製作引擎都在適當的位置上進行戰鬥。類似地,嘗試直接設定由動畫製作者控制的檢視的幀通常會導致抖動動畫和意外放置。將檢視作為專案新增到 UIDynamicBehavior 意味著動畫師將承擔定位檢視的責任,因此應通過動畫師實現檢視位置的更改。

可以設定由動態動畫製作者更新的檢視框架,但是應該立即向動畫師傳送訊息以更新動畫製作者的檢視層次結構的內部模型。例如,如果我有 UILabellabelUIGravityBehavior 的專案,我可以將它移動到螢幕頂部,通過說:

迅速

label.frame = CGRect(x: 0.0, y: 0.0, width: label.intrinsicContentSize.width, height: label.intrinsicContentSize.height)
dynamicAnimator.updateItem(usingCurrentState: label)

Objective-C

self.label.frame = CGRectMake(0.0, 0.0, self.label.intrinsicContentSize.width, self.label.intrinsicContentSize.height);
[self.dynamicAnimator updateItemUsingCurrentState: self.label];

之後,動畫師將從標籤的新位置應用重力行為。

另一種常見技術是使用 UIDynamicBehaviors 來定位檢視。例如,如果需要在觸控事件下定位檢視,則建立 UIAttachmentBehavior 並在 touchesMovedUIGestureRecognizer 的動作中更新其 anchorPoint 是一種有效的策略。