2012-11-07 6 views

Odpowiedz

7

Na szczęście jest to łatwe:

float UIAnimationDragCoefficient(void); 

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

Wow. Nie wiedziałem o tym! –

+0

Niestety Apple zepsuł go na iOS 7. –

+0

Christian, nadal działa na iOS 8. Zobacz moje rozwiązanie, które działa również na 64-bitowym. –

4

Niestety to nie takie proste. Zajrzyj pod numer this code pod numer 0xced, aby dowiedzieć się, jak wolno wykonywać CAAnimacje w symulatorze.

+0

Wow! Ekscytujące rzeczy! – hfossli

2

zdefiniowałem tej funkcji, która zwraca współczynnik pomnożyć trwania animacji z (1 jeśli powolne animacje są wyłączone, współczynnik powolność inaczej):

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

nocie używam float, a nie CGFloat jako typu zwrotu funkcji o nazwie UIAnimationDragCoefficient(). Jest to potrzebne do pracy z symulatorem 64-bitowym.

Następnie można po prostu pomnożyć czas trwania animacji:

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

Jak to zrobić w Swift 3.0:

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

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

Należy zauważyć, że niestety nie można używać TARGET_IPHONE_SIMULATOR w czasie kompilacji w Swift, i nie należy umieszczać tego w swoich zgłoszeniach do App Store, ponieważ możesz odrzucić prywatne API.

+0

To znaczy, że używasz prywatnego API. Twoja aplikacja może zostać odrzucona w sklepie z aplikacjami, czy mam rację? – hfossli

+1

Tak, nie powinieneś budować tego w sklepie z aplikacjami w swoim kodzie (w ogóle nie powinieneś tego potrzebować w sklepie z aplikacjami). Moją sugestią jest użycie tego na osobnym obiekcie do budowania i zdefiniowanie niestandardowej flagi Swift, która nie będzie uwzględniała tego przy budowaniu dla sklepu. – stu

Powiązane problemy