8

मैं निम्नलिखित कोड का उपयोग UINavigationController के लिए एक विस्तार के रूप में एक कस्टम एनिमेशन के साथ एक दृश्य नियंत्रक पुश करने के लिए:कस्टम एनिमेशन के साथ एक UITableViewController धकेल हमेशा UINavigationItem शीर्षक एनिमेट होने

@implementation UINavigationController (PushAnimation) 

- (void)pushViewController:(UIViewController*)controller withTransition:(UIViewAnimationTransition)transition 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [self pushViewController:controller animated:NO]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationBeginsFromCurrentState:YES];   
    [UIView setAnimationTransition:transition forView:self.view cache:YES]; 
    [UIView commitAnimations]; 
} 

@end 

कैशिंग सक्षम होने पर, मैं एक अजीब एनीमेशन व्यवहार मिलता है UITableViewController दबाते समय। कस्टम एनीमेशन पूरा होने के बाद धक्का दृश्य का शीर्षक प्रकट होता है। संक्रमण शैली UIViewAnimationTransitionNone के साथ, यह स्पष्ट हो जाता है कि शीर्षक स्वयं एनिमेटेड है। यह स्क्रीन के ऊपरी बाएं कोने से UINavigationBar के केंद्र में स्थानांतरित हो गया है।

कैशिंग अक्षम होने के साथ, यह एनीमेशन इसकी गति के कारण दिखाई नहीं दे रहा है, लेकिन फ्रेम दर महत्वपूर्ण रूप से गिरती है।

मैं शीर्षक को एनिमेटेड होने से कैसे रोक सकता हूं?

+1

मुझे लगता है कि शीर्षक की एनीमेशन 'UINavigationBar' कोड में हो रही है। एक विचार यह भी होगा कि इसके साथ-साथ इसके डिफ़ॉल्ट व्यवहार को बदलना – adig

उत्तर

0

बस एक त्वरित अद्यतन क्या मेरी ठीक अंत में था। UINavigationBar के डिफ़ॉल्ट व्यवहार को ओवरराइड करना संभव नहीं था, क्योंकि आईओएस एनीमेशन को लागू करने के लिए निजी एपीआई का उपयोग करता है। तो मैं निम्नलिखित कोड का उपयोग कर, UINavigationBar, और इसके विभिन्न subviews पर सभी एनिमेशन को हटाने के समाप्त हो गया:

[self.navigationBar.layer removeAllAnimations]; 
for (UIView *view in self.navigationBar.subviews) { 
    [view.layer removeAllAnimations]; 
    for (UIView *sub in view.subviews) { 
     [sub.layer removeAllAnimations]; 
    } 
} 

यह महत्वपूर्ण है कि इस [self pushViewController:controller animated:NO]; के बाद कहा जाता है।

0

समस्या यह है कि आप एनिमेटिंग पूर्ण दृश्य self.view हैं। self.view में व्यू कंट्रोलर के साथ-साथ UINavigationBar भी शामिल है। तो आपको शायद self.view के सभी सबव्यूव प्राप्त करना होगा और फिर अपने व्यू कंट्रोलर से संबंधित view को एनिमेट करना होगा।

+0

ठीक है, मैं नेविगेशन बार को भी एनिमेट करना चाहता हूं, क्योंकि मैं पूरी स्क्रीन को बदलना चाहता हूं, न केवल यूआईएनविगेशनबार के नीचे की सामग्री। समस्या यह है कि, मैं UINavigationbar के डिफ़ॉल्ट नेविगेशन को अक्षम करने में सक्षम नहीं प्रतीत होता। –

0

इस कोड का प्रयोग करें एक बहुत ही सरल तरीके से अपने नेविगेशन संक्रमण एनीमेशन अनुकूलित करने के लिए:

CATransition* transition = [CATransition animation]; 
transition.duration = 0.5; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionMoveIn; //kCATransitionPush; //kCATransitionReveal; //kCATransitionFade; 
//transition.subtype = kCATransitionFromRight; //transition.subtype = kCATransitionFromLeft; //transition.subtype = kCATransitionFromTop; //transition.subtype = kCATransitionFromBottom; 
transition.subtype = kCATransitionFromRight; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
[[self navigationController] popViewControllerAnimated:NO]; 

और धक्का के लिए एक ही बात।

** अपनी कक्षा में #import <QuartzCore/QuartzCore.h> करना सुनिश्चित करें, और यह भी अपने प्रोजेक्ट में

लक्ष्य ढांचे जोड़ने> चरण का निर्माण> लिंक पुस्तकालयों के साथ बाइनरी> "+" बटन> QuartzCore.framework

। **

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