ほとんどの場合、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
) やパフォーマンスの測定など、いくつかの追加機能があります。