2010-01-05 13 views
31

मैं एक सबव्यू से वापस सुपर व्यू में संक्रमण को एनिमेट करना चाहता हूं।एनिमेटिंग निकालें FromSuperview

[UIView beginAnimations:@"curlup" context:nil]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; 
[self.view addSubview:self.mysubview.view]; 
[UIView commitAnimations]; 

ऊपर काम करता है ठीक:

मैं subview का उपयोग कर प्रदर्शित करते हैं। यह सुपर दृश्य पर वापस जा रहा है कि मैं किसी भी एनीमेशन नहीं मिलता:

[UIView beginAnimations:@"curldown" context:nil]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES]; 
[self.view removeFromSuperview]; 
[UIView commitAnimations]; 

वहाँ कुछ अलग रहा subview जब हटाया चेतन को पाने के लिए क्या करना चाहिए है?

उत्तर

23

मुझे लगता है कि आप जो जोड़ रहे हैं उसके साथ संगत होने के लिए आपको forView:self.view.superview करने की आवश्यकता है, क्योंकि इस मामले में self.view बच्चा है, और इसलिए आपको इसे माता-पिता पर करना होगा।

+0

यह बहुत अच्छी तरह से काम करता है ...;) –

97

आप आईओएस 4.0 लक्ष्यीकरण कर रहे हैं ऊपर की तरफ आप के बजाय एनीमेशन ब्लॉक का उपयोग कर सकते हैं:

[UIView animateWithDuration:0.2 
    animations:^{view.alpha = 0.0;} 
    completion:^(BOOL finished){ [view removeFromSuperview]; }]; 

(कोड ऊपर Apple's UIView documentation से आता है)

+3

धन्यवाद। यह इतना आसान है। –

+0

हां! मैंने हमेशा सोचा * हटाने * 0.2 सेकंड लेता है। लेकिन हटाने तुरंत तत्काल होता है। * अल्फा परिवर्तन *, 0.2 सेकंड ले लो। अगर हम इसे 200 सेकेंड में सेट करते हैं तो फिर भी पर्यवेक्षण से हटाने तत्काल होगा, लेकिन यह 200 सेकंड बीतने तक नहीं होगा ... – Honey

1

हालांकि एनीमेशन पूरा होने के ब्लॉक से removeFromSuperview संदेश भेजने के साथ दृष्टिकोण के लिए ठीक काम करता है ज्यादातर मामलों में, कभी-कभी दृश्य पदानुक्रम से तत्काल हटाने से देखने को रोकने का कोई तरीका नहीं है।

उदाहरण के लिए, MKMapView के बाद यह संदेश removeAnnotations प्राप्त करता है, और वहाँ एपीआई में इस संदेश के लिए कोई "एनिमेटेड" विकल्प नहीं है अपने subviews निकाल देता है।

बहरहाल निम्नलिखित कोड आप जो कुछ भी एक दृश्य का एक दृश्य क्लोन के साथ की तरह के बाद यह superview से हटा दिया गया है या यहां तक ​​कि पुनः आवंटित की जाती ऐसा करने के लिए अनुमति देता है:

UIView * snapshotView = [view snapshotViewAfterScreenUpdates:NO]; 
snapshotView.frame = view.frame; 
[[view superview] insertSubview:snapshotView aboveSubview:view]; 

// Calling API function that implicitly triggers removeFromSuperview for view 
[mapView removeAnnotation: annotation]; 

// Safely animate snapshotView and release it when animation is finished 
[UIView animateWithDuration:1.0 
        snapshotView.alpha = 0.0; 
       } 
       completion:^(BOOL finished) { 
        [snapshotView removeFromSuperview]; 
       }]; 
9
स्विफ्ट में

JosephH जवाब:

UIView.animateWithDuration(0.2, animations: {view.alpha = 0.0}, 
           completion: {(value: Bool) in 
               view.removeFromSuperview() 
              }) 

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

  • कोई संबंधित समस्या नहीं^_^