3
我正在使用UIPanGestureRecognizer和UIAttachmentBehavior在屏幕上移動UIView。當用戶結束手勢時,我使用UIDynamicItemBehavior和addLinearVelocity:forItem:方法將手勢識別器的速度應用於視圖。是否有可能知道[UIDynamicItemBehavior addLinearVelocity:forItem:]何時已完成運行?
這裏是我使用的代碼:
- (void)_handlePanGestureRecognized: (UIPanGestureRecognizer *)panGestureRecognizer
{
if (panGestureRecognizer.state == UIGestureRecognizerStateBegan)
{
_attachmentBehavior.anchorPoint = panGestureRecognizer.view.center;
[_dynamicAnimator addBehavior: _attachmentBehavior];
}
else if (panGestureRecognizer.state == UIGestureRecognizerStateChanged)
{
CGPoint point = [panGestureRecognizer locationInView: panGestureRecognizer.view.superview];
_attachmentBehavior.anchorPoint = point;
}
else if (panGestureRecognizer.state == UIGestureRecognizerStateEnded)
{
[_dynamicAnimator removeBehavior: _attachmentBehavior];
CGPoint velocity = [panGestureRecognizer velocityInView: panGestureRecognizer.view.superview];
[_dynamicItemBehavior addLinearVelocity: velocity
forItem: self];
}
}
當視圖停止移動,然後我想有它捕捉到畫面的最接近的邊緣,但我目前還沒有辦法知道,當它已經停止沒有用CADisplayLink來查看視圖的中心。
我試過了。它確實有效,但是在物品停止移動後,回調會發生好一兩次。我意識到幕後的物理引擎可能仍然在進行計算,但我非常確定,如果使用CADisplayLink記錄視圖的中心,它將在調用dynamicAnimatorDidPause:之前幾秒鐘不會改變。 –
是的,我認爲你是對的;定期檢查velocityForItem:在UIDynamicItemBehavior上查看它是否降到閾值以下可能是您最好的選擇。 – Greg
令人討厭的是,Apple在2013年WWDC首次UIKit Dynamics演示中完全符合我的要求。會議206五分鐘後,他們將圖片放在屏幕上,如果它們落在一個盒子附近,它們會對齊它。他們說這是一個WWDC演示應用程序,但他們從未發佈源代碼。 –