ios - @synchronized [UIView animationWithDuration ...] 锁定结束?

标签 ios objective-c multithreading uikit

@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/

相关文章:

IOS Touch ID公钥和私钥

iPhone 应用程序在 main.m 中崩溃,没有更多信息..?

ios - 检测蓝牙信号的准确频率

Python线程设计

ios - 检测到 PDFView 确实滚动了

ios - 通过自定义UITableViewCells提高ViewController的加载速度(记录已损坏)

ios - Mogenerator 是否适用于 Xcode 6?

objective-c - 应用程序仅在 xcode 仪器中崩溃

c - pthread - sleep 阻止其他线程执行

c# - 事件的 SynchronizingObject