2012-01-30 13 views
5

मैं UIViewController गायब होने से पहले एनीमेशन का उपयोग करके नेविगेशन बार को छिपाना चाहता हूं।देखने के लिए एनीमेशन के लिए इंतजार कैसे करें DidDisappear?

-(void) viewWillDisappear:(BOOL) animated { 
    [UIView transitionWithView:self.view 
         duration:UINavigationControllerHideShowBarDuration 
         options:UIViewAnimationCurveEaseOut 
        animations:^{ 
     [self.navigationController setNavigationBarHidden:YES];  
    } 
        completion:^(BOOL finished){ 
        NSLog(@"animation finished"); 
    }]; 

    [super viewWillDisappear:animated]; 
} 

समस्या यह है कि viewWillDisappear निष्पादित करने के लिए और बस लौट सकते हैं और पूरे दृश्य दूर एनीमेशन खत्म होने से पहले जाना होगा जारी रहेगा: इसलिए मैं निम्नलिखित लागू किया है। एनीमेशन के पूरा होने से पहले मैं वापस लौटने से विधि को कैसे रोक सकता हूं (जहां "एनीमेशन समाप्त हो गया" मुद्रित हो जाता है)।

+0

आप इसे एनिमेट नहीं कर सकते हैं। हो सकता है कि आप 'setNavigationBarHidden: एनिमेटेड:' विधि की बजाय खोज रहे हैं? –

+0

मैं 'setNavigationBarHidden: एनिमेटेड: 'का उपयोग नहीं करना चाहता क्योंकि यह आईओएस 4 (बायीं ओर स्लाइड) और आईओएस 5 (शीर्ष की तरफ स्लाइड) में अलग-अलग एनिमेट करता है। किसी भी तरह, इससे कोई फर्क नहीं पड़ता क्योंकि, 'setNavigationBarHidden: एनिमेटेड:' 'viewWillDisappear 'ब्लॉक के भीतर अभी भी एनीमेशन खत्म होने से पहले विधि वापस आती है। मुझे लगता है कि शायद दो धागे की जरूरत है? –

उत्तर

2

viewWillDisappear:animated संक्षेप में सौजन्य अधिसूचना है। यह सिर्फ आपको बता रहा है कि ऐसा होने से पहले क्या निकट है। आप वास्तव में दृश्य के गायब होने या अवरुद्ध नहीं कर सकते हैं।

आपका सबसे अच्छा समाधान UINavigationController पर एक वर्ग बनाने के लिए कि इस तरह के (untested) के रूप में तरीकों बनाता होगा:

- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated { 
    [UIView transitionWithView:viewController.view 
         duration:UINavigationControllerHideShowBarDuration 
         options:UIViewAnimationCurveEaseOut 
        animations:^{ 
         [self.navigationController setNavigationBarHidden:NO];  
        } 
        completion:^(BOOL finished){ 
         NSLog(@"animation finished"); 
         [self pushViewController:viewController animated:animated]; 
        }]; 
} 

- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated { 
    [UIView transitionWithView:self.visibleViewController.view 
         duration:UINavigationControllerHideShowBarDuration 
         options:UIViewAnimationCurveEaseOut 
        animations:^{ 
         [self.navigationController setNavigationBarHidden:YES];  
        } 
        completion:^(BOOL finished){ 
         NSLog(@"animation finished"); 
         [self popViewControllerAnimated:animated]; 
        }]; 
} 

फिर आप के बजाय

- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated

और

पर इन कह सकते हैं

- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated

क्रमशः 0

+0

बहुत अच्छा लगता है :), हालांकि मुझे यकीन नहीं है कि जब आप संक्रमण का उपयोग करते हैं तो क्या होता है: एक curveEaseInOut विकल्प के साथ, कभी ऐसा नहीं किया। –

+0

मैं सहमत हूं, मुझे पूरी तरह से यकीन नहीं है। संक्रमण WithView का उपयोग: ओपी के मूल कोड से आता है, लेकिन मैंने इसका परीक्षण नहीं किया है। –

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