我正在玩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];
这是一个简单的快照行为,它运作良好。但是,出于各种原因,我想知道系统何时进入“休息”状态 - 即一切都停止移动。我对动画师的属性或委托方法都很好。
我该怎么做?
答案 0 :(得分:17)
经过更多的讨论之后,似乎 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
。
此外,UIDynamicAnimator本身的running
属性似乎镜像了对委托方法的调用 - 当调用 willResume 时它是1
,并且它是{{1}当 didPause 被调用时。
答案 1 :(得分:1)
动画师有一个属性"运行"它告诉你动画师什么时候休息。
与动画师行为相关联的视图只有在动画师运行时才能改变位置或改变变换。出于优化目的,iOS可以暂停然后重新启动动画师。如果您需要检查您的视图当前是否受位置或变换的影响,请使用此方法。
答案 2 :(得分:0)
Swift 4.2:
//MARK:- UIDynamicAnimator Delegate
extension YourViewController: UIDynamicAnimatorDelegate {
func dynamicAnimatorDidPause(_ animator: UIDynamicAnimator) {
// pause
}
func dynamicAnimatorWillResume(_ animator: UIDynamicAnimator) {
// resume
}
}