@synchronized 会锁定到动画结束吗?
__weak typeof(sharedManager) weakManager = sharedManager;
^(CMDeviceMotion *motion, NSError *error)
{
@synchronized(weakManager)
{ ... some code
if (angle != sharedManager.angle)
{
if (sharedManager.isLocked) return;
sharedManager.locked = YES;
sharedManager.angle = angle;
CGAffineTransform transform = (angle == 0) ?
CGAffineTransformIdentity : CGAffineTransformMakeRotation(angle);
sharedManager.currentTransform = transform;
[UIView animateWithDuration:.25
animations:^
{
[weakManager.animatedViews setValue:[NSValue valueWithCGAffineTransform:transform]
forKey:@"transform"];
}
completion:^(BOOL finished)
{
weakManager.locked = NO;
}];
}
}
}];
最佳答案
没有。它只会等待方法调用的持续时间。实际的动画是异步发生的,不会影响锁。
我想如果你想要那种行为,你可以使用 NSRecursiveLock 并在动画的完成 block 中显式解锁,但这是一件很奇怪的事情。
关于ios - @synchronized [UIView animationWithDuration ...] 锁定结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198711/