11

我正在玩UIKitDynamics,它真的很整洁。目前我有这个代码:

CGPoint center = [newSelectedLabel center];

[self.animator removeBehavior:self.snapBehavior];
self.snapBehavior = [[UISnapBehavior alloc] initWithItem:self.indicatorView snapToPoint:center];
self.snapBehavior.damping = 0.67;
[self.animator addBehavior:self.snapBehavior];

[self.delegate didChangeToIndex:sender.tag];

这是一个简单的快照行为,而且效果很好。但是,出于各种原因,我想知道系统何时进入“静止”状态——即一切都停止移动。我对动画师的属性或委托方法都很好。

我怎样才能做到这一点?

4

3 回答 3

20

经过一番摸索,似乎是这样UIDynamicAnimatorDelegate做的——该- (void)dynamicAnimatorDidPause:(UIDynamicAnimator *)animator方法似乎在系统处于静止状态时被调用。

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
self.animator.delegate = self;

#pragma mark - UIDynamicAnimator Delegate
- (void)dynamicAnimatorDidPause:(UIDynamicAnimator *)animator
{
    NSLog(@"pause");
}

- (void)dynamicAnimatorWillResume:(UIDynamicAnimator *)animator
{
    NSLog(@"resume");
}

似乎工作 -resume在动画开始时pause记录,并在动画停止后的一秒内记录。

此外,runningUIDynamicAnimator 本身的属性似乎反映了对委托方法的调用 - 这是调用willResume1的时间,也是调用didPause的时间。0

于 2014-03-08T00:52:11.480 回答
1

动画师有一个属性“正在运行”,它告诉您动画师何时处于静止状态。

只有在动画师运行时,与动画师的行为相关联的视图才能改变位置或改变变换。出于优化目的,iOS 可以暂停然后重新启动动画制作器。如果您需要检查您的视图当前是否受到位置或变换的更改,请使用此方法。

于 2016-05-26T13:28:40.047 回答
0

斯威夫特 4.2:

//MARK:- UIDynamicAnimator Delegate
extension YourViewController: UIDynamicAnimatorDelegate {
    func dynamicAnimatorDidPause(_ animator: UIDynamicAnimator) {
        // pause
    }

    func dynamicAnimatorWillResume(_ animator: UIDynamicAnimator) {
        // resume
    }
}
于 2019-01-08T13:40:17.113 回答