2012-11-07 41 views
12

में आईओएस सिम्युलेटर में धीमी एनिमेशन चालू/बंद है या नहीं, मैं प्रोग्रामेटिक रूप से पता लगाना चाहता हूं कि सिम्युलेटर में धीमी एनिमेशन चालू या बंद है या नहीं।पता लगाएं कि कोड

ऐसा कुछ आसान होगा।

IPHONE_SIMULATOR_SLOW_ANIMATIONS_ENABLED() 

यह केवल विकास उद्देश्यों के लिए है।

उत्तर

7

सौभाग्य से यह आसान है:

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 UIAnimationDragCoefficient(void); 

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

वाह। मैं उस बारे में नहीं जानता था! –

+0

दुर्भाग्यवश ऐप्पल ने इसे आईओएस 7 में तोड़ दिया। –

+0

ईसाई, यह अभी भी आईओएस 8 में काम करता है। मेरा समाधान देखें जो 64 बिट पर भी काम करता है। –

4

दुर्भाग्य से यह इतना आसान नहीं है। सिम्युलेटर में धीमी सीएएनीमेशन बनाने के लिए this code पर 0xced पर एक नज़र डालें।

+0

वाह! रोमांचक सामान! – hfossli

2

मैं इस समारोह है कि कारक रिटर्न के साथ (1 यदि धीमी गति से एनिमेशन अक्षम हैं, सुस्ती कारक अन्यथा) एनीमेशन अवधि गुणा करने के लिए परिभाषित किया गया कि मैं float का उपयोग नहीं करता, CGFloatUIAnimationDragCoefficient() फ़ंक्शन के रिटर्न प्रकार के रूप में नहीं। 64 बिट सिम्युलेटर के साथ काम करने के लिए यह आवश्यक है।

तो मैं बस एनीमेशन अवधि गुणा कर सकते हैं:

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

स्विफ्ट 3.0 में यह करने के लिए कैसे:

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

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

ध्यान दें कि दुर्भाग्य से आप स्विफ्ट में संकलन समय पर TARGET_IPHONE_SIMULATOR उपयोग नहीं कर सकते, और आपको इसे अपने ऐप स्टोर सबमिशन में शामिल नहीं करना चाहिए क्योंकि आपको निजी एपीआई का उपयोग करने के लिए खारिज कर दिया जा सकता है।

+0

अच्छा, तो यह निजी एपीआई का उपयोग कर रहा है। ऐप स्टोर में आपका ऐप खारिज कर दिया जा सकता है, क्या मैं सही हूँ? – hfossli

+1

हां, आपको अपने कोड में ऐप स्टोर के लिए निर्माण नहीं करना चाहिए (हालांकि आपको ऐप स्टोर के लिए इसकी आवश्यकता नहीं है)। मेरा सुझाव है कि इसे एक अलग निर्माण लक्ष्य पर उपयोग करें और कस्टम स्विफ्ट ध्वज को परिभाषित करें जिसमें स्टोर के लिए निर्माण करते समय इसे शामिल नहीं किया जाएगा। – stu

संबंधित मुद्दे