シミュレータで遅いアニメーションがオンかオフかをプログラムで検出したいと思います。iOSシミュレータでスローアニメーションがオンかオフかをコード
このようなものは便利でしょう。
IPHONE_SIMULATOR_SLOW_ANIMATIONS_ENABLED()
これは開発目的のみです。
シミュレータで遅いアニメーションがオンかオフかをプログラムで検出したいと思います。iOSシミュレータでスローアニメーションがオンかオフかをコード
このようなものは便利でしょう。
IPHONE_SIMULATOR_SLOW_ANIMATIONS_ENABLED()
これは開発目的のみです。
幸いにも、それは簡単です:
float UIAnimationDragCoefficient(void);
static inline BOOL slowAnimationsEnabled()
{
#if TARGET_IPHONE_SIMULATOR
return UIAnimationDragCoefficient() != 1;
#else
return NO;
#endif
}
私は(そうでない場合は、遅さの要因をゆっくりとアニメーションが無効になっている場合1)とアニメーションの継続時間を乗算する係数を返すこの関数を定義した:
CGFloat FTSimulatorAnimationDragCoefficient(void) {
static float (*UIAnimationDragCoefficient)(void) = NULL;
#if TARGET_IPHONE_SIMULATOR
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UIAnimationDragCoefficient = (float (*)(void))dlsym(RTLD_DEFAULT, "UIAnimationDragCoefficient");
});
#endif
return UIAnimationDragCoefficient ? UIAnimationDragCoefficient() : 1.f;
}
注意私はfloat
を使用し、UIAnimationDragCoefficient()
関数の戻り値の型にはCGFloat
ではありません。これは、64ビットシミュレータを使用する場合に必要です。
それから私は単にアニメーションの再生時間を掛けることができます:スウィフト3.0でこれを行うにはどのように
CAAnimation animation = [CABasicAnimation animation];
animation.duration = 0.5 * FTSimulatorAnimationDragCoefficient();
:残念ながらあなたはスウィフトにコンパイル時にTARGET_IPHONE_SIMULATOR
を使用することはできません
@_silgen_name("UIAnimationDragCoefficient") func UIAnimationDragCoefficient() -> Float
func slowAnimationsEnabled() -> Bool {
return UIAnimationDragCoefficient() != 1.0
}
注意を、プライベートAPIの使用を拒否される可能性があるため、これをApp Storeの投稿に含めるべきではありません。
うわー。私はそのことについて知らなかった! –
残念ながら、AppleはiOS 7でそれを壊しました。 –
クリスチャン、それはまだiOS 8で動作します。64ビットでも動作する私のソリューションを参照してください。 –