2015-09-05 7 views
15

मैं सेब घड़ी के लिए एक छोटा ऐप बना रहा हूं। मेरे पास एक समूह और एक लेबल है। मुझे क्या करना कोशिश कर रहा हूँ है: छवि एनीमेशन के बाद लेबल में सेब घड़ी - धीमी छवि एनीमेशन पहली बार

  • फीका समूह के

    • चेतन पृष्ठभूमि छवि

    समाप्त होता है मेरे कोड इस तरह अनिवार्य रूप से दिखता है:

     group.setBackgroundImageNamed("show_back-"); 
         group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1); 
         let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))) 
         dispatch_after(delayTime, dispatch_get_main_queue()) {() -> Void in 
          self.animateWithDuration(1) {() -> Void in 
           self.label.setAlpha(1) 
          }; 
         }; 
    

    समस्या यह है कि पहली बार इस अनुक्रम को ट्रिगर किया गया है, छवि एनीमेशन 1.5 सेकंड से धीमी गति से चल रहा है, क्योंकि लेबल बदलने से पहले लेबल में लुप्त होना शुरू होता है। यदि ऐप चल रहा है, तो यह फिर से ट्रिगर किया जाता है, सबकुछ अपेक्षित काम करता है। मुझे लगता है कि यह छवियों preloading या कुछ के साथ कुछ करने के लिए है।

    मैं इसे लगातार कैसे काम कर सकता हूं? मुझे सब्सक्राइब करने के लिए छवि अनुक्रम एनीमेशन अंत पर किसी प्रकार का कॉलबैक नहीं मिला।

    संपादित एक अन्य समस्या मैंने देखा है: मैं एक और मामला है जब बीजी एक dispatch_after ब्लॉक से एनिमेटेड है है, और जब मैं या तो dispatch_after ब्लॉक मुकुट दोहन से एप्लिकेशन छोड़ने के लिए और उस पर डबल-टैप करके लौटने के लिए, ट्रिगर नहीं किया गया है, या पृष्ठभूमि एनीमेशन को पहली बार सही तरीके से प्रस्तुत नहीं किया जाता है (मुझे लगता है कि दूसरा, क्योंकि मैंने प्रेषण ब्लॉक में ब्रेकपॉइंट जोड़ने की कोशिश की और जब भी मैंने परीक्षण किया तो यह ट्रिगर हुआ)। मैं watchOS2 चला रहा हूं, तो शायद यह बीटा राज्य से संबंधित है जिसमें ओएस वर्तमान में है?

  • +0

    क्या आप सिम्युलेटर का उपयोग कर रहे हैं? – needshelp

    +3

    @needshelp नहीं, मैं एक असली डिवाइस पर परीक्षण कर रहा हूं; सिम्युलेटर पर सब कुछ पूरी तरह से काम करता है। – alchemiss

    +0

    आपकी छवियां किस आकार हैं? – Swinny89

    उत्तर

    0

    कोशिश

    group.setBackgroundImageNamed("show_back-"); 
    
    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))) 
    
    dispatch_after(delayTime, dispatch_get_main_queue()) {() -> Void in 
         self.animateWithDuration(1) {() -> Void in 
          group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1); 
          self.label.setAlpha(1) 
         }; 
        }; 
    

    कर मैं बिल्कुल यकीन है कि आप क्या कर रहे हैं नहीं कर रहा हूँ, लेकिन यह भी animateWithDuration करने का प्रयास करें (0) या (1,5)

    0

    मैं आप के रूप में एक ही मुद्दे में भाग गया।

    ऐसा इसलिए होता है क्योंकि पहली बार आप इसे आजमाते हैं, घड़ी में छवियों को लोड करने में समय लगता है। इसके अलावा सेब हमें किसी भी 'पूर्व लोड' विधि नहीं देता है, तो मैं इसके चारों ओर एक छोटे से काम के साथ आया था: जब मेरे नियंत्रक प्रदर्शित किया जाएगा:

    func willActivate() 
    

    मैं एक पृष्ठभूमि चलने में एक बार एनीमेशन अनुक्रम खेलने , इस तरह जब मेरा उपयोगकर्ता उस पर क्लिक करता है तो छवियां पहले ही लोड हो चुकी हैं।

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,  0)) { [weak self] in 
          if let uSelf = self { 
           uSelf.statusAnimationImage.setImageNamed("my image name") 
           uSelf.statusAnimationImage.startAnimatingWithImagesInRange(NSMakeRange(0, 359), duration: 0.5, repeatCount: 1) 
          } 
         } 
    

    यह समस्या हल करने का सबसे अच्छा तरीका था और यह मेरे लिए काम करता है।

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