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();
Wow. Ich wusste nichts davon! –
Leider Apple brach es in iOS 7. –
Christian, es funktioniert immer noch in iOS 8. Siehe meine Lösung, die auch auf 64-Bit funktioniert. –