2013-02-24 20 views
8

से वर्तमान व्यू कंट्रोलर एनीमेशन मेरे पास एक सिंगल व्यू ऐप है और दाईं ओर एक एनएवी बार बटन दबाते समय एक नया व्यू कंट्रोलर दिखाना चाहता है। मैं इस कोड से यह कुलपति फोन:साइड

- (IBAction)createEntryButton:(id)sender { 
    CreateEntryViewController *vc2 = [[CreateEntryViewController alloc] init]; 
    [self presentViewController:vc2 animated:TRUE completion:nil]; 
} 

इस एनिमेशन, तथापि, नीचे जिससे उसे प्रति सहज लगता है मेरी यूआई के अनुसार से में vc2 लाता है। तो मेरा सवाल है:

मैं वर्तमान viewController के साथ नीचे के बजाय अपना वीसी 2 दाएं से कैसे दिख सकता हूं?

धन्यवाद।

उत्तर

9

.. साफ धक्का और विचारों पॉपिंग के लिए एक navigationController उपयोग करने के लिए किया जाएगा

यदि आप यदि आप नहीं कर रहे हैं एक navigationController

[self.navigationCtroller pushViewController:vc2 animated:TRUE completion:nil] 

में पहले से ही कर रहे हैं, कोड अनुकूलन जहां आपके विचार नियंत्रक खिड़की में जोड़ा गया है। अपने कुलपति rootWindowController है और आप स्टोरीबोर्डिंग का उपयोग नहीं कर रहे हैं, तो इस

अगर आप स्टोरीबोर्ड का उपयोग करें, स्टोरीबोर्ड अनुकूलन ताकि आप एक नेविगेशन नियंत्रक


और के अंदर हैं यदि आप डॉन अपने AppDelegate में होने की संभावना है ' टी किसी भी कारण से: :) बस मैन्युअल रूप से एनिमेट करें 2. UIView एनिमेट का उपयोग करके वीसी के दृश्य: vc2.view ....]

लिखित इनलाइन - विधि नाम मेल नहीं खाते हैं लेकिन सामान्य दृष्टिकोण दिखाते हैं:

UIView *v = vc2.view; 
CGRect f = v.frame; 
f.origin.x += self.view.frame.size.width; //move to right 

v.frame = f; 

[UIView animateWithDuration:0.5 animations:^{ 
    v.frame = self.view.frame; 
} completion:^(BOOL finished) { 
    [self presentViewController:vc2 animated:NO completion:nil]; 
}]; 

पूरा होने के ब्लॉक में दृश्य नियंत्रक vc2 गैर-एनिमेटेड उपहार के रूप में आप पहले से ही किया था कि अपने आप को

+0

एक नेविगेशन नियंत्रक btw एक नेविगेशन पट्टी को दिखाने के लिए की जरूरत नहीं है :) –

+0

अब मैं निम्नलिखित के साथ 'vc2' को कॉल करता हूं: AppDelegate * appDelegate = [[UIAplplication sharedAplication] प्रतिनिधि]; CreateEntryViewController * vc2 = [[CreateEntryViewController alloc] init]; [appDelegate.navController pushViewController: vc2 एनिमेटेड: TRUE]; लेकिन मैं जो सही सोचता हूं उसके साथ वापस नहीं आ सकता: ऐपडिलेगेट * ऐपडिलेगेट = [[यूआईएप्लिकेशंस साझा अनुप्रयोग] प्रतिनिधि]; [appDelegate.navController dismissViewControllerAnimated: सत्य पूर्णता: शून्य]; कोई विचार? –

+0

हां, आप vc2 को ऐपडिलेगेट के साथ कॉल नहीं करना चाहते हैं - यह .... अजीब - इसे अपने स्वयं के नेविगेशन नियंत्रक का उपयोग करके कॉल करें। [जिसमें वीसी 1 है] (vc1.navigationController) –

0

यह मैं मदद की,

- (void)presentNewViewController{ 
    NewViewController *objNewViewController =[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil]; 

    UIView *tempNewVCView = [UIView new]; 
    tempNewVCView = objNewViewController.view; 
    tempNewVCView.frame = self.view.frame; 

    CGRect initialFrame = self.view.frame; 
    initialFrame.origin.x = self.view.frame.size.width; 

    tempNewVCView.frame = initialFrame; 

    [self.view addSubview:tempNewVCView]; 

    [UIView animateWithDuration:0.3 animations:^{ 
     tempNewVCView.frame = self.view.frame; 
    } completion:^(BOOL finished) { 
     [self presentViewController:objNewViewController animated:NO completion:^{ 
     }]; 
    }]; 
}