8

मेरे पास एक ऐप है जिसमें इसके प्रत्येक पक्ष के दो दृश्यों के साथ एक केंद्रीय दृश्य है। मैं दो नेविगेशन बार बटन, बाएं और दाएं रखना चाहता हूं जो बाएं या दाएं से दृश्य पर एक नया नेविगेशन नियंत्रक धक्का देते हैं।आईफोन पुशिंग व्यू कंट्रोलर बाएं दिशा में

जब आप pushviewController का उपयोग करके एक नया दृश्य दबाकर दृश्य बदलते हैं: नेविगेशन नियंत्रक की विधि, दृश्य दाईं ओर स्लाइड करने के लिए प्रतीत होता है। मैं इसे बाएं से स्लाइड करने के लिए कैसे बदलूं?

उत्तर

8

नेविगेशन नियंत्रक का उपयोग करने के बजाय, मैं केवल दृश्य को स्थानांतरित कर दूंगा।

CGRect inFrame = [currentView frame]; 
CGRect outFrame = firstFrame; 
outFrame.origin.x -= inFrame.size.width; 

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

[newView setFrame:inFrame]; 
currentView setFrame:outFrame]; 

[UIView commitAnimations]; 
+0

तो दृश्य नियंत्रक को सामान्य तरीके से लोड करें, फिर दृश्य पर एक हैंडल प्राप्त करें, फिर इसे स्थानांतरित करें? मुझे नेविगेशन बार बटन मैन्युअल रूप से –

+0

दाएं भी बदलना होगा। व्यू कंट्रोलर को सामान्य के रूप में लोड करें, और स्क्रीन को चालू करें और देखें और नया दृश्य देखें। –

+0

यह काम करता है (आपको बाएं से स्लाइड करने के लिए - = = एक + = के साथ) को प्रतिस्थापित करना होगा। हालांकि इसका मतलब है कि प्रत्येक दृश्य के लिए मैन्युअल रूप से सभी बटन वापस और आगे करना। क्या मुसीबत है। –

4

मुझे नहीं लगता कि आप स्पष्ट रूप से UINavigationControllers में दिशा रपट को परिभाषित कर सकते हैं। आप जो करने में सक्षम हो सकते हैं वह पूर्व दृश्य दिखाने के लिए नेविगेशन स्टैक से वर्तमान दृश्य पॉप है, जो आप चाहते हैं कि एनिमेट करेंगे। हालांकि यह जटिल हो सकता है यदि आप वर्तमान दृश्य पर जो कुछ भी करते हैं उसके आधार पर अलग-अलग दृश्य नियंत्रक दिखाना चाहते हैं।

यदि आपका वर्कफ़्लो बहुत जटिल नहीं है, तो आप वर्तमान दृश्य नियंत्रक में पूर्व दृश्य नियंत्रक का संदर्भ धारण कर सकते हैं। क्या आप वर्तमान दृश्य पर करते हैं पर निर्भर करता है (जैसे एक तालिका दृश्य सेल का चयन), आप बदल सकते हैं जो कुछ भी डेटा आप पहले दृश्य नियंत्रक में की जरूरत है और फिर

[self.navigationController popViewController]; 

फोन या जो कुछ भी सही तरीका है (मुझे लगता है कि यह कितना करीब है यह कैसे है)। जो आपको एनीमेशन के साथ एनएवी स्टैक को नीचे ले जाने देगा, जो काम करता है यदि आपके एनवी स्टैक पर इस पर विचारों की एक निश्चित संख्या है।

0

"पॉइंट" प्रकार बटन प्राप्त करने के लिए आपको एक अलग विधि का उपयोग करने की आवश्यकता है।

अपने AppDelegate में:

UITableViewController *first = [[RootViewController alloc] initWithStyle:UITableViewStylePlain]; 
UITableViewController *second = [[SomeOtherViewController alloc] initWithStyle:UITableViewStylePlain]; 

NSArray *stack = [NSArray arrayWithObjects: first, second, nil]; 

UINavigationController *nav = [[UINavigationController alloc] init]; 
[nav setViewControllers:stack animated:NO]; 
9

मैं परिवर्तन एनीमेशन दिशा किया है जब हम ViewController धक्का। आप एनीमेशन प्रकार को यहां बदल सकते हैं [एनीमेशन सेटसबटाइप: केसीएट्रानिशनफ्रोराइट];

ViewController *elementController = [[ViewController alloc] init]; 

// set the element for the controller 
ViewController.element = element; 


// push the element view controller onto the navigation stack to display it 

CATransition *animation = [CATransition animation]; 
[[self navigationController] pushViewController:elementController animated:NO]; 
[animation setDuration:0.45]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromRight]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]]; 
[[elementController.view layer] addAnimation:animation forKey:@"SwitchToView1"]; 

[elementController release]; 
+1

यह पिछले दृश्य नियंत्रक काला बनाता है, यह बुरी चीज है। –

0

आप RTLNavigationController वारिस कर सकते हैं: UINavigationController और इन कार्यों के ऊपर लिख।

- (void) pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    DummyViewController*dvc = [[DummyViewController alloc] init]; 
    [super pushViewController:viewController animated:NO]; 
    [super pushViewController:dvc animated:NO]; 
    [dvc release]; 
    [super popViewControllerAnimated:YES]; 
} 

और

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
UIViewController *firstViewController = [super popViewControllerAnimated:NO]; 
UIViewController *viewController = [super popViewControllerAnimated:NO]; 
[super pushViewController:viewController animated:animated]; 
return firstViewController; 
} 

और आवेदन प्रतिनिधि में:

navCon = [[RTLNavigationController alloc] init]; 

rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
rootViewController.contextDelegate = self; 

DummyViewController *dvc = [[DummyViewController alloc]init]; 
[navCon pushViewController:dvc animated:NO]; 
[dvc release]; 

[navCon pushViewController:rootViewController animated:NO]; 
[self.window addSubview:navCon.view]; 

धकेल बाएं से दाएं और

3

छोड़ दिया करने के लिए क्या रीड ऑलसेन कहा करने के लिए सही से पॉपिंग से हो जाएगा: आपको केवल एक बटन को हुक करना होगा, जो स्लाइड को उसी विधि तक शुरू करता है और एक बूल जोड़ता है जो टी को ट्रैक करता है वह दिखाया गया है या नहीं। आपको बस मूल रूप से मूल सेट करना है।

- (IBAction)slideMenuView 
{ 
    CGRect inFrame = [self.view frame]; 
    CGRect outFrame = self.view.frame; 

    if (self.viewisHidden) { 
    outFrame.origin.x += inFrame.size.width-50; 
    self.viewisHidden = NO; 
    } else { 
    outFrame.origin.x -= inFrame.size.width-50; 
    self.viewisHidden = YES; 
    } 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [self.menuView setFrame:inFrame]; 
    [self.view setFrame:outFrame]; 
    [UIView commitAnimations]; 
}