2014-09-02 6 views
9

मैं इस UIView एनीमेशन पर पूरा होने की उम्मीद कर रहा हूँ बंद निर्दिष्ट अवधि के बाद के नाम से जाना, लेकिन यह तुरंत फायरिंग प्रतीत होता है ...स्विफ्ट UIView animateWithDuration पूरा होने बंद बुलाया तुरंत

UIView.animateWithDuration(
     Double(0.2), 
     animations: { 
      self.frame = CGRectMake(0, -self.bounds.height, self.bounds.width, self.bounds.height) 
     }, 
     completion: { finished in 
      if(finished) { 
       self.removeFromSuperview() 
      } 
     } 
    ) 

किसी और अनुभवी किसी को भी है इस? मैंने पढ़ा है कि दृश्य को स्थानांतरित करने के लिए फ्रेम के बजाए दूसरों को केंद्र का उपयोग करके और अधिक सफलता मिली है, हालांकि मुझे इस विधि के साथ भी यही समस्याएं थीं।

+0

आप इस कोड को कहां निष्पादित करते हैं? – akashivskyy

+3

सुनिश्चित करें कि फ्रेम * वास्तव में * बदलता है, क्योंकि कोई एनीमेशन नहीं होने पर पूर्णता ब्लॉक को तुरंत कॉल किया जाता है। एक कस्टम UIView कक्षा में – akashivskyy

+0

। मैं init() में शुरू करने के लिए दृश्य में दृश्य को एनिमेट करता हूं, फिर उपरोक्त कोड को तब कहा जाता है जब कोई टैप कहीं भी होता है। फ्रेम निश्चित रूप से भी बदल रहा है ... –

उत्तर

0

मैं और है कि इस के साथ एक समस्या हो रही है किसी को भी के लिए hitTest() से और UIView

8

में touchesBegan() में एनीमेशन ले जाकर अंत में यह समस्या हल नहीं है, अगर कुछ एनीमेशन में दखल है, पूरा होने के बंद होने के तुरंत कहा जाता है । मेरे मामले में, यह व्यू कंट्रोलर के एक मोडल संक्रमण के साथ मामूली ओवरलैप के कारण था कि कस्टम सेग्यू अनचाहे था। के delay भाग का उपयोग करने के लिए मेरे लिए कोई प्रभाव नहीं पड़ा। मैं एनीमेशन को एक सेकंड के अंश में देरी करने के लिए जीसीडी का उपयोग कर समाप्त हुआ।

// To avoid overlapping with the modal transiton 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { 

    // Animate the transition 
    UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { 

     // Animations 

     }, completion: { finished in 

     // remove the views 
     if finished {    
      blurView.removeFromSuperview() 
      snapshot.removeFromSuperview() 
     } 
    }) 
}) 
संबंधित मुद्दे