13

シミュレータで遅いアニメーションがオンかオフかをプログラムで検出したい。

このようなものが便利でしょう。

IPHONE_SIMULATOR_SLOW_ANIMATIONS_ENABLED()

これは開発のみを目的としています。

4

4 に答える 4

9

幸い、それは簡単です。

float UIAnimationDragCoefficient(void);

static inline BOOL slowAnimationsEnabled()
{
#if TARGET_IPHONE_SIMULATOR
    return UIAnimationDragCoefficient() != 1;
#else
    return NO;
#endif
}
于 2012-11-09T11:58:22.867 に答える
4

残念ながら、それはそれほど簡単ではありません。シミュレーターで遅いCAAnimationsを作成する方法については、 0xcedによるこのコードを参照してください。

于 2012-11-07T22:44:36.107 に答える
3

Swift 3.0でこれを行う方法:

@_silgen_name("UIAnimationDragCoefficient") func UIAnimationDragCoefficient() -> Float

func slowAnimationsEnabled() -> Bool {
    return UIAnimationDragCoefficient() != 1.0
}

残念ながら、Swiftではコンパイル時に使用できないことに注意してTARGET_IPHONE_SIMULATORください。プライベートAPIの使用が拒否される可能性があるため、これをAppStoreの送信に含めないでください。

于 2016-11-07T21:08:12.533 に答える
2

アニメーションの継続時間を乗算する係数を返すこの関数を定義しました(遅いアニメーションが無効になっている場合は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ではなく、を使用していることに注意してください。これは、64ビットシミュレーターで動作するために必要です。CGFloatUIAnimationDragCoefficient()

次に、アニメーションの継続時間を単純に乗算できます。

CAAnimation animation = [CABasicAnimation animation];
animation.duration = 0.5 * FTSimulatorAnimationDragCoefficient();
于 2015-05-19T10:51:41.553 に答える