大多数情况NSAnimationContext
下是作为CATransaction
. 您可以使用像Hopper这样的反汇编工具对 AppKit 的代码进行逆向工程,然后自己查看。以下是NSAnimationContext
伪Objective-C中的一些重构方法:
void +[NSAnimationContext beginGrouping](void * self, void * _cmd) {
if (([CATransaction currentState] & 0x3) != 0x0) {
[CATransaction begin];
} else {
rdi = @class(CATransaction);
if (pthread_main_np() != 0x0) {
[rdi activate];
[CATransaction begin];
}
else {
[rdi begin];
[CATransaction activateBackground:0x1];
}
}
[CATransaction setValue:@(YES) forKey:@"NSAnimationContextBeganGroup"];
return;
}
void +[NSAnimationContext endGrouping](void * self, void * _cmd) {
[CATransaction commit];
return;
}
void -[NSAnimationContext setTimingFunction:](void * self, void * _cmd, void * arg2) {
[CATransaction setAnimationTimingFunction:arg2];
return;
}
除此之外,它NSAnimationContext
还有一些附加功能,例如如果按下 shift 键 ( NSAnimationSlowMotionOnShift
) 则更改动画持续时间和测量性能。