दिलचस्प पोस्ट
Android टूलबार में एक बटन बनाना HTTP त्रुटि 404.3 – नहीं मिला "Windows सर्वर 2008 (64 बिट) पर wcf सेवा ब्राउज़ करते समय कैसे एक फाइल DOS (विंडोज कमांड प्रॉम्प्ट) में मौजूद है, यह कैसे सत्यापित करें। बैट फ़ाइल? जावास्क्रिप्ट या (||) चर असाइनमेंट स्पष्टीकरण RabbitMQ 3.3.1 अतिथि / अतिथि के साथ लॉगिन नहीं कर सकता पीलाब और पाप्लोट के बीच अंतर क्या है? रैकेट में एक अजीब तरह से क्यों पहना जाता है? javascript – document.write त्रुटि? Numpy.float128 की आंतरिक सटीक क्या है? मैं जैक्सन के साथ खेतों को एनोटेशन का उपयोग नहीं कर रहा हूं? रोलिंग आर में डेटाटाइटेबल मिलती है आईफोन से अग्रेषित जीओकोडिंग IOS7 जब UISearchbar को UINavigationBar में जोड़ा गया रद्द बटन नहीं दिखा रहा है " (स्क्वायर कोष्ठ) से त्रुटि एक्लिप्स का इस्तेमाल करते हुए जार फ़ाइल में सभी छवियों को कैसे शामिल किया जाए

नेविगेशन नियंत्रक स्टैक, सबव्यूज़ या मोडल कंट्रोलर का उपयोग किए बिना दृश्य नियंत्रकों के परिवर्तन का एनीमेट करें?

नेविगेशन नियंत्रकों के प्रबंधन के लिए ViewController स्टैक और सीमित एनिमेशन संक्रमण हैं।

एक दृश्य नियंत्रक को किसी मौजूदा दृश्य नियंत्रक को उप-दृश्य के रूप में जोड़ने के लिए उप-दृश्य नियंत्रक को घटनाओं की आवश्यकता होती है, जो प्रबंधन के लिए एक दर्द है, थोड़ा सा झुंझलाहट से भरा हुआ है और सामान्य रूप से इसे लागू करते समय एक बुरा हैड जैसा लगता है (एप्पल भी यह कर रहा हूं)।

एक मोडल व्यू नियंत्रक प्रस्तुत करने से दूसरे के शीर्ष पर एक दृश्य नियंत्रक रखता है, और जब इसके ऊपर वर्णित समस्याओं को पारित करने वाला ईवेंट नहीं होता है, यह वास्तव में दृश्य नियंत्रक 'स्वैप' नहीं करता है, यह ढेर हो जाता है

स्टोरीबोर्ड आईओएस 5 तक सीमित हैं, और लगभग आदर्श हैं, लेकिन सभी परियोजनाओं में उपयोग नहीं किया जा सकता है।

क्या कोई उपरोक्त सीमाओं के बिना दृश्य नियंत्रकों को बदलने के लिए एक ठोस कोड उदाहरण प्रस्तुत करता है और उनके बीच एनिमेटेड बदलाव की अनुमति देता है?

एक करीबी उदाहरण, लेकिन कोई एनीमेशन नहीं: एक नेविगेशन नियंत्रक के बिना कई आईओएस कस्टम दृश्य नियंत्रक का उपयोग कैसे करें

संपादित करें: नव नियंत्रक का उपयोग ठीक है, लेकिन एनिमेटेड ट्रांज़िशन शैलियों (केवल स्लाइड इफेक्ट्स) की आवश्यकता नहीं है, दृश्य नियंत्रक दिखाया जा रहा है पूरी तरह से स्वैप करने की आवश्यकता नहीं है (स्टैक नहीं)। यदि दूसरा दृश्य नियंत्रक को स्टैक से दूसरे दृश्य नियंत्रक को निकालना होगा, तो यह पर्याप्त रूप से समझा नहीं है

2 संपादित करें: इस प्रश्न के लिए आईओएस 4 मूल ओएस होना चाहिए, मुझे स्पष्ट होना चाहिए था कि स्टोरीबोर्ड (ऊपर) का उल्लेख करते समय

Solutions Collecting From Web of "नेविगेशन नियंत्रक स्टैक, सबव्यूज़ या मोडल कंट्रोलर का उपयोग किए बिना दृश्य नियंत्रकों के परिवर्तन का एनीमेट करें?"

संपादित करें: नया उत्तर जो किसी अभिविन्यास में काम करता है मूल उत्तर केवल तभी काम करता है जब इंटरफ़ेस चित्र अभिविन्यास में होता है यह बी / सी दृश्य ट्रांज़िशन एनीमेशन है जो दृश्य को प्रतिस्थापित करता है / एक अलग दृश्य विंडो में जुड़ने वाले पहले दृश्य के नीचे कम से कम एक स्तर के दृश्यों के साथ होने चाहिए (जैसे window.rootViewController.view.anotherView )।

मैंने TransitionController नामक एक सरल कंटेनर क्लास को लागू किया है I आप इसे 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]; } 

संपादित करें: नीचे मूल उत्तर – केवल पोर्टेट ओरिएंटेशन के लिए काम करता है

मैंने इस उदाहरण के लिए निम्नलिखित मान्यताओं को बनाया है:

  1. आपके दृश्य विंडो नियंत्रक को rootViewController विंडो नियंत्रक के रूप में निर्दिष्ट किया गया है

  2. जब आप एक नया दृश्य पर स्विच करते हैं तो आप वर्तमान दृश्य नियंत्रक को देखना चाहते हैं दृश्यकंट्रोलर के साथ नए दृश्य का मालिक है। किसी भी समय, केवल वर्तमान दृश्य नियंत्रक जीवित है (जैसे एलोका'एड)।

कोड को आसानी से काम करने के लिए आसानी से संशोधित किया जा सकता है, कुंजी बिंदु एनिमेटेड संक्रमण और एकल दृश्य नियंत्रक है। सुनिश्चित करें कि आप किसी दृश्य नियंत्रक को window.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]; } 

आप एप्पल के नए दृश्य नियंत्रक नियंत्रण प्रणाली का उपयोग कर सकते हैं। अधिक गहराई से जानकारी के लिए WWDC 2011 सत्र वीडियो " UIViewController नियंत्रण लागू करना" देखें

IOS5 पर नई, UIViewController कंटेनन की मदद से आप एक माता पिता के दृश्य नियंत्रक और कई बच्चे को देख सकते हैं। नियंत्रक जो इसमें शामिल हैं ऐसा कैसे होता है कि UISplitViewController काम करता है ऐसा करने से आप अपने माता-पिता में अपने नियंत्रक को देख सकते हैं, परन्तु अपने विशेष आवेदन के लिए आप केवल एक दृश्य दृश्य नियंत्रक से दूसरे में संक्रमण का प्रबंधन करने के लिए माता-पिता का उपयोग कर रहे हैं। यह एप्पल को काम करने और एक बच्चे के दृश्य से एनिमेट करने का अनुमोदित तरीका है। नियंत्रक दर्द रहित है प्लस आप सभी विभिन्न विभिन्न UIViewAnimationOption बदलाव का उपयोग करने के लिए मिलता है!

इसके अलावा, UIViewContainment के साथ, आपको चिंता करने की ज़रूरत नहीं है, जब तक कि आप यह नहीं चाहते कि अभिविन्यास कार्यक्रमों के दौरान बाल दृश्य नियंत्रक के प्रबंधन के बारे में। आप यह सुनिश्चित करने के लिए बस निम्नलिखित का उपयोग कर सकते हैं कि आपके पैरेंट विय्यू कंट्रोलर रोटेशन इवेंट को बाल दृश्य नियंत्रकों से आगे ले जाए।

 - (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers{ return YES; } 

आप अपने बच्चे के viewDidLoad विधि में निम्नलिखित बच्चे को पहले बाल वीकंट्रोलर सेटअप करने के लिए कर सकते हैं:

 [self addChildViewController:self.currentViewController]; [self.view addSubview:self.currentViewController.view]; [self.currentViewController didMoveToParentViewController:self]; [self.currentViewController.swapViewControllerButton setTitle:@"Swap" forState:UIControlStateNormal]; 

तब जब आपको बच्चे के दृश्य नियंत्रक को बदलने की आवश्यकता होती है, तो आप मूल व्यू में नियंत्रक के नीचे की कुछ पंक्तियों को कॉल करते हैं: नियंत्रक:

 -(void)swapViewControllers:(childViewController *)addChildViewController:aNewViewController{ [self addChildViewController:aNewViewController]; __weak __block ViewController *weakSelf=self; [self transitionFromViewController:self.currentViewController toViewController:aNewViewController duration:1.0 options:UIViewAnimationOptionTransitionCurlUp animations:nil completion:^(BOOL finished) { [aNewViewController didMoveToParentViewController:weakSelf]; [weakSelf.currentViewController willMoveToParentViewController:nil]; [weakSelf.currentViewController removeFromParentViewController]; weakSelf.currentViewController=[aNewViewController autorelease]; }]; } 

मैंने यहां एक पूर्ण उदाहरण प्रोजेक्ट पोस्ट किया: https://github.com/toolmanGitHub/stackedViewControllers यह अन्य प्रोजेक्ट दिखाता है कि कुछ विभिन्न इनपुट दृश्य नियंत्रक प्रकारों पर UIViewController नियंत्रण का उपयोग कैसे करें, जो पूरी स्क्रीन नहीं लेते हैं। सौभाग्य

ठीक है, मुझे पता है कि एक नेविगेशन नियंत्रक का उपयोग किए बिना सवाल है, लेकिन कोई कारण नहीं ओपी समय पर टिप्पणी करने के लिए मेरे सोने के लिए जाने का जवाब नहीं दे रहा था। मुझे मत मत दो। 🙂

वर्तमान दृश्य नियंत्रक को पॉप कैसे करें और एक नेविगेशन नियंत्रक का उपयोग करके एक नया दृश्य नियंत्रक के लिए फ़्लिप करें:

 UINavigationController *myNavigationController = self.navigationController; [[self retain] autorelease]; [myNavigationController popViewControllerAnimated:NO]; PreferencesViewController *controller = [[PreferencesViewController alloc] initWithNibName:nil bundle:nil]; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration: 0.65]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myNavigationController.view cache:YES]; [myNavigationController pushViewController:controller animated:NO]; [UIView commitAnimations]; [controller release]; 

चूंकि मैं सिर्फ इस सटीक समस्या में हुआ था, और सीमित सफलता के सभी पूर्व-मौजूदा उत्तरों पर भिन्नताएं करने की कोशिश की, मैं बाद में इसे हल करने का तरीका बताऊंगा:

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

उपर्युक्त लिंक्ड पोस्ट, नेविगेशन नियंत्रक स्टैक पर मौजूदा टॉप व्यू नियंत्रक को प्रतिस्थापित करने के लिए आईओएस 4 कोड प्रदान करता है, जिसमें एक स्लाइड-इन-टॉप-टॉप एनीमेशन का उपयोग करते हुए एक नया वाला होता है।

मेरे मामले में, मैं एक ऐसी जगह की जगह लेने की जगह चाहता था, लेकिन एक FlipFromLeft संक्रमण के साथ। मुझे केवल iOS 5+ के लिए समर्थन की आवश्यकता है कोड:

RAFlipReplaceSegue.h से:

 #import <UIKit/UIKit.h> @interface RAFlipReplaceSegue : UIStoryboardSegue @end 

RAFlipReplaceSegue.m से:

 #import "RAFlipReplaceSegue.h" @implementation RAFlipReplaceSegue -(void) perform { UIViewController *destVC = self.destinationViewController; UIViewController *sourceVC = self.sourceViewController; [destVC viewWillAppear:YES]; destVC.view.frame = sourceVC.view.frame; [UIView transitionFromView:sourceVC.view toView:destVC.view duration:0.7 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) { [destVC viewDidAppear:YES]; UINavigationController *nav = sourceVC.navigationController; [nav popViewControllerAnimated:NO]; [nav pushViewController:destVC animated:NO]; } ]; } @end 

अब, किसी भी अन्य प्रकार की सेगू को सेट करने के लिए नियंत्रण-खींचें, फिर इसे कस्टम सेग्यू बनाएं, और कस्टम सेगू क्लास के नाम पर टाइप करें, और वॉयला!

मैं एक लंबे समय से इस एक के साथ संघर्ष किया है, और मेरे मुद्दों में से एक यहाँ सूचीबद्ध है , मुझे यकीन नहीं है अगर आपको लगता है कि समस्या थी लेकिन यहां बताया गया है कि अगर आईओएस 4 के साथ काम करना चाहिए तो मैं क्या सुझाऊंगा।

सबसे पहले, एक नया NavigationController वर्ग बनाएँ। यह वह जगह है जहां हम सभी गंदे काम करेंगे – अन्य वर्ग "साफ-साफ" pushViewController: जैसे उदाहरण तरीकों को कॉल करने में सक्षम होंगे pushViewController: और इस तरह आपके .h :

 @interface NavigationController : UIViewController { NSMutableArray *childViewControllers; UIViewController *currentViewController; } - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL))completion; - (void)addChildViewController:(UIViewController *)childController; - (void)removeChildViewController:(UIViewController *)childController; 

बच्चे को देखने नियंत्रक सरणी हमारे स्टैक में सभी दृश्य नियंत्रकों के लिए एक दुकान के रूप में सेवा करेंगे। हम NavigationController currentController दृश्य से currentController को सभी रोटेशन और currentController कोड स्वचालित रूप से आगे करेंगे।

अब, हमारे कार्यान्वयन में:

 - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL))completion { currentViewController = [toViewController retain]; // Put any auto- and manual-resizing handling code here [UIView animateWithDuration:duration animations:animations completion:completion]; [fromViewController.view removeFromSuperview]; } - (void)addChildViewController:(UIViewController *)childController { [childViewControllers addObject:childController]; } - (void)removeChildViewController:(UIViewController *)childController { [childViewControllers removeObject:childController]; } 

अब आप अपने खुद के कस्टम popViewController pushViewController: को लागू कर सकते हैं popViewController और इस तरह, इन विधि कॉल का उपयोग कर।

गुड लक और मुझे उम्मीद है इससे मदद मिलेगी!

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UINavigationController *viewController = (UINavigationController *)[storyboard instantiateViewControllerWithIdentifier:@"storyBoardIdentifier"]; viewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; [self presentViewController:viewController animated:YES completion:nil]; 

इस कोड की कोशिश करो


यह कोड एक दृश्य नियंत्रक से दूसरे दृश्य नियंत्रक को ट्रांजिशन देता है जिसमें एक नेविगेशन नियंत्रक होता है।