5

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

संक्षेप में, VC1 स्लाइड जबकि VC2 यह नीचे है:

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

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

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 पृष्ठभूमि में निश्चित नहीं है लेकिन वहाँ यह साथ समस्याएं हैं। इस तरह की स्लाइड भी अच्छी तरह से (भले ही मैंने kCATransitionReveal निर्दिष्ट किया हो)। मैं पृष्ठभूमि में पूरी तरह से तय वीसी 2 होना चाहता हूँ।
  2. वीसी 1 बाहर निकलता है। मैं वास्तव में क्यों नहीं जानता क्यों। मैंने kCatransitionFade या पसंद का उपयोग नहीं किया, इसलिए मैं नहीं देख सकता कि फीका कहां से आता है।

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

उत्तर

1

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

This blog explains how...

तो अगर आप VC के बीच कस्टम एनिमेशन करना चाहता था, 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]; 


} 
3

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

+0

धन्यवाद ओले, मैंने इसे बदल दिया और वीसी 2 अब और नहीं चलता है। इसके बारे में सोचना चाहिए था। फीका के बारे में कोई विचार, यद्यपि? मैं अभी भी नहीं देख सकता कि फीका आउट एनीमेशन कहां से आ रहा है। –

+0

मुझे लगता है कि फीड वास्तव में UINavigationController एनीमेशन का हिस्सा और पार्सल है और मुझे इससे छुटकारा नहीं मिल रहा है। क्या आप UinavigationController लागू कस्टम फीड एनीमेशन को अक्षम करने के किसी भी तरीके से जानते हैं? –

संबंधित मुद्दे