संपादित करें: नया उत्तर जो किसी भी अभिविन्यास में काम करता है।
मूल उत्तर केवल तब काम करता है जब इंटरफ़ेस पोर्ट्रेट ओरिएंटेशन में होता है। यह b / c दृश्य संक्रमण एनिमेशन है जो दृश्य w / को अलग करता है, विंडो में जोड़े गए पहले दृश्य (जैसेwindow.rootViewController.view.anotherView
)से कम से कम एक स्तर के दृश्य के साथ होना चाहिए।
मैंने एक साधारण कंटेनर क्लास लागू किया है जिसे मैंने बुलाया है TransitionController
। आप इसे https://gist.github.com/1394947 पर देख सकते हैं ।
एक तरफ के रूप में, मैं एक अलग वर्ग बी / सी में कार्यान्वयन को प्राथमिकता देता हूं इसका पुन: उपयोग करना आसान है। यदि आप ऐसा नहीं चाहते हैं, तो आप बस TransitionController
कक्षा के लिए आवश्यकता को समाप्त करते हुए सीधे अपने ऐप प्रतिनिधि में उसी तर्क को लागू कर सकते हैं । हालाँकि आपको जिस तर्क की आवश्यकता होगी, वही होगा।
इसे निम्नानुसार उपयोग करें:
अपने एप्लिकेशन प्रतिनिधि में
// add a property for the TransitionController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MyViewController *vc = [[MyViewContoller alloc] init...];
self.transitionController = [[TransitionController alloc] initWithViewController:vc];
self.window.rootViewController = self.transitionController;
[self.window makeKeyAndVisible];
return YES;
}
किसी भी दृश्य नियंत्रक से एक नए दृश्य नियंत्रक में संक्रमण करने के लिए
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
EDIT: मूल उत्तर नीचे दिया गया है - केवल पोर्टेट ओरिएंटेशन के लिए काम करता है
मैंने इस उदाहरण के लिए निम्नलिखित धारणाएँ बनाई हैं:
आपके पास एक दृश्य नियंत्रक के रूप में निर्दिष्ट है rootViewController
अपनी विंडो के
जब आप एक नए दृश्य पर स्विच करते हैं, तो आप वर्तमान दृश्य को बदलने की इच्छा रखते हैं, नए दृश्य के स्वामित्व वाले दृश्य नियंत्रक के साथ। किसी भी समय, केवल वर्तमान दृश्य नियंत्रक जीवित है (उदाहरण के लिए आबंटित)।
कोड को आसानी से अलग तरीके से काम करने के लिए संशोधित किया जा सकता है, मुख्य बिंदु एनिमेटेड संक्रमण और एकल दृश्य नियंत्रक है। सुनिश्चित करें कि आप इसे निर्दिष्ट करने के बाहर कहीं भी एक दृश्य नियंत्रक नहीं रखते हैंwindow.rootViewController
।
एप्लिकेशन प्रतिनिधि में संक्रमण को चेतन करने के लिए कोड
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
{
[UIView transitionFromView:self.window.rootViewController.view
toView:viewController.view
duration:0.65f
options:transition
completion:^(BOOL finished){
self.window.rootViewController = viewController;
}];
}
एक दृश्य नियंत्रक में उदाहरण का उपयोग करें
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}