iphone - अनुकूलन नियंत्रक एनीमेशन अनुकूलित करें: CATransition




cocoa-touch uinavigationcontroller (2)

मुझे लगता है कि आपको [[self navigationController] pushViewController:vctwo animated:NO]; उपयोग करना चाहिए [[self navigationController] pushViewController:vctwo animated:NO]; बजाय animated:YES

मेरे पास एक UINavigationController है मैंने वीसी 1 को रूट वीक्यू कंट्रोलर बना दिया है और प्रोग्रामेटिक रूप से वीसी 1 से वीसी 2 लोड किया है और इसके बाद कस्टम एनीमेशन को वीसी 1 से वीसी 2 तक ले जाना है। स्टैंडर्ड। सब कुछ ठीक है और अच्छा है

अब, मैं दोनों के बीच एक कस्टम एनीमेशन चाहूंगा जैसे:

राशि में, वीसी 1 दृश्य के बाहर स्लाइड करता है, जबकि वीसी 2 नीचे है। जैसे कागज की एक स्टैक की तरह, जहां आप पहली शीट (वीसी 1) को दूर करते हैं और इस तरह शीशर नीचे (वीसी 2) प्रकट करते हैं।

तो मैंने जो कोशिश की वह निम्नलिखित कोड है जिसे वीसी 2 से प्राप्त करने के लिए VC1 से कहा जाता है। लेकिन इसके साथ समस्याएं हैं:

MyVC2 *vctwo = [[[MyVC2 alloc] init] autorelease];

CATransition *transition = [CATransition animation];
transition.duration = 1;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionReveal;
transition.subtype = kCATransitionFromRight;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:nil];

[[self navigationController] pushViewController:vctwo animated:YES];

समस्या निम्न हैं:

  1. पृष्ठभूमि में VC2 निश्चित नहीं है इस तरह की स्लाइड्स के रूप में अच्छी तरह से (भले ही मैंने केकेआरआरएन्सिशन रीवेल निर्दिष्ट किया)। मैं पृष्ठभूमि में पूरी तरह से तय VC2 होना चाहता हूँ
  2. VC1 बाहर fades मुझे सच में पता नहीं क्यों मैंने केकैटसंसेशन फ़ेड या पसंद का उपयोग नहीं किया, इसलिए मैं नहीं देख सकता कि फीड कहाँ से आता है।

किसी भी सुझाव के लिए मुझे उम्मीद के मुताबिक न होने के कारण बहुत सराहना की जाएगी। माफ करना, अगर यह स्पष्ट है, लेकिन मैं इसे घंटों के लिए कोशिश कर रहा हूं और वास्तव में निराश हूं।


मुझे लगता है कि ऐसा करने का एकमात्र तरीका है UINavigationController को भूल जाना और सब कुछ संभाल करने के लिए अपनी स्वयं की व्यवस्था के साथ आना।

यह ब्लॉग बताता है कि कैसे ...

इसलिए यदि आप वीसीएस के बीच कस्टम ऐनिमेशन चाहते हैं, तो UINavigationController का उपयोग न करें। ऊपर बताए अनुसार दो वीसी के बीच स्वैप करने के लिए नमूना कोड दिया गया है:

    -(void)slideDoorOpenTo:(UIViewController *)aController duration:(float)aDuration {

    [aController viewWillAppear:YES];
    [activeController viewWillDisappear:YES];

    //aController.view.alpha = 0.0f;
    [self.view insertSubview:aController.view belowSubview:activeController.view]; // so that it is below activeController

    [aController viewDidAppear:YES];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:aDuration];

    aController.view.transform = CGAffineTransformMakeTranslation(0,0);
    activeController.view.transform = CGAffineTransformMakeTranslation(-320,0);

    [UIView commitAnimations];

    [self performSelector:@selector(animationDone:) withObject:aController afterDelay:aDuration];


}




catransition