我想以编程方式检测模拟器中是否打开或关闭慢动画。
这样的东西会很方便。
IPHONE_SIMULATOR_SLOW_ANIMATIONS_ENABLED()
这仅用于开发目的。
答案 0 :(得分:8)
幸运的是,这很简单:
float UIAnimationDragCoefficient(void);
static inline BOOL slowAnimationsEnabled()
{
#if TARGET_IPHONE_SIMULATOR
return UIAnimationDragCoefficient() != 1;
#else
return NO;
#endif
}
答案 1 :(得分:4)
答案 2 :(得分: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
而不是CGFloat
作为被调用UIAnimationDragCoefficient()
函数的返回类型。这需要与64位模拟器一起使用。
然后我可以简单地将动画持续时间相乘:
CAAnimation animation = [CABasicAnimation animation];
animation.duration = 0.5 * FTSimulatorAnimationDragCoefficient();
答案 3 :(得分:2)
如何在Swift 3.0中执行此操作:
TARGET_IPHONE_SIMULATOR
请注意,遗憾的是,您无法在Swift的编译时使用firstDayOfWeek()
,并且您不应将其包含在App Store提交中,因为您可能因使用私有API而被拒绝。