2012-11-07 5 views

Antwort

7

Zum Glück ist es einfach:

float UIAnimationDragCoefficient(void); 

static inline BOOL slowAnimationsEnabled() 
{ 
#if TARGET_IPHONE_SIMULATOR 
    return UIAnimationDragCoefficient() != 1; 
#else 
    return NO; 
#endif 
} 
+0

Wow. Ich wusste nichts davon! –

+0

Leider Apple brach es in iOS 7. –

+0

Christian, es funktioniert immer noch in iOS 8. Siehe meine Lösung, die auch auf 64-Bit funktioniert. –

4

Leider ist es nicht so einfach. Schauen Sie sich this code von 0xced für wie Sie langsam CAAnimations im Simulator machen.

+0

Wow! Spannende Sachen! – hfossli

2

ich diese Funktion definiert, die den Faktor gibt Animation Dauern mit (1, wenn langsamen Animationen sind deaktiviert, der Langsamkeit Faktor anders) zu multiplizieren:

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; 
} 

Hinweis dass ich float, nicht CGFloat als Rückgabetyp der aufgerufenen UIAnimationDragCoefficient() Funktion verwende. Dies ist erforderlich, um mit dem 64-Bit-Simulator zu arbeiten.

Dann kann ich einfach die Animation Dauer multiplizieren:

CAAnimation animation = [CABasicAnimation animation]; 
animation.duration = 0.5 * FTSimulatorAnimationDragCoefficient(); 
1

Wie das 3.0 in Swift tun:

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

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

Beachten Sie, dass Sie leider nicht TARGET_IPHONE_SIMULATOR bei der Kompilierung in Swift verwenden können, Sie sollten dies nicht in Ihre App Store-Einreichungen aufnehmen, da Sie möglicherweise abgelehnt werden, private APIs zu verwenden.

+0

Nun, das ist eine private API. Ihre App wird möglicherweise im App Store abgelehnt. Habe ich Recht? – hfossli

+1

Ja, Sie sollten nicht für den App Store mit diesem in Ihrem Code erstellen (Sie sollten dies jedoch für den App Store überhaupt nicht benötigen). Mein Vorschlag ist es, dies auf einem separaten Build-Ziel zu verwenden und ein benutzerdefiniertes Swift-Flag zu definieren, das dies beim Erstellen für das Geschäft nicht berücksichtigt. – stu