2012-01-21 8 views
13

मैं अपने पेश कुलपति में निम्नलिखित कोड का उपयोग कर रहा बच्चा मोडल कुलपति में फीका करने के लिए, और इस ठीक काम करता है:फ़ेड आउट एनीमेशन के साथ एक मोडल वीसी को कैसे खारिज करें?

self.infoViewController.view.alpha = 0.0; 
[self.navigationController presentModalViewController:self.infoViewController animated:NO]; 
[UIView animateWithDuration:0.5 
      animations:^{self.infoViewController.view.alpha = 1.0;}]; 

हालांकि मैं इसे बाहर फीका करने के लिए नहीं मिल सकता है, मैं कुछ चीजें की कोशिश की है,

- (IBAction)dismissAction:(id)sender 
{ 
if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)]) 
{ 
    [[self parentViewController] dismissModalViewControllerAnimated:YES]; 
    self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    self.parentViewController.view.alpha = 0.0; 
    [UIView animateWithDuration:0.5 
        animations:^{self.parentViewController.view.alpha = 1.0;}]; 
} else 
{ 
    [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 
    self.presentedViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    self.presentedViewController.view.alpha = 0.0; 
    [UIView animateWithDuration:0.5 
        animations:^{ 
         self.presentedViewController.view.alpha = 1.0;}]; 
} 

}

मोडल दृश्य नियंत्रक बाहर फीका है, लेकिन तुरंत, एक समय अवधि में नहीं यह जब इसकी दिखाया गया है जैसे: इस नवीनतम मैंने कोशिश की है कि काम नहीं करता है।

+0

आप 'के रूप में dismissModalViewControllerAnimated'। – smparkes

+0

आप एक एनीमेशन खारिज देख रहे हैं तो यह सुनिश्चित करें कि' presentedViewController' करने के लिए कॉल की रक्षा के लिए और साथ ही आवश्यकता होगी, तो आप आईओएस 5 से पहले उपकरणों पर चलाने के लिए इस कोड को चाहते हैं लगता है कि इस कोड को निष्पादित किया जा रहा है और इसे किसी अन्य पथ से खारिज कर दिया जा रहा है। – smparkes

उत्तर

48

यह (मूल भाग) H2CO3 के सही उत्तर से दूर नहीं है। UIModalTransitionStyleCrossDissolve वास्तव में आपके द्वारा देखे जाने वाले प्रभाव को बहुत अधिक करता है। आप बस देर तक होने तक modalTransitionStyle सेट नहीं कर रहे हैं। वहाँ संबंधित पदों में इन कार्यों के साथ अपने कोड के सभी बदलें:

समय एक मुद्दा जा रहा है के जवाब में
-(void)show{ 
    self.infoViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:self.infoViewController animated:YES]; 
} 
- (IBAction)dismissAction:(id)sender{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

संपादित करें: के अपमानजनक कोड के बारे में बात करते हैं। हम केवल सही हिस्से पर ध्यान केंद्रित करेंगे, क्योंकि यह अनिवार्य रूप से अन्य के समान है।

[[self parentViewController] dismissModalViewControllerAnimated:YES]; 
self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
self.parentViewController.view.alpha = 0.0; 
[UIView animateWithDuration:0.5 
       animations:^{self.parentViewController.view.alpha = 1.0;}]; 

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

[UIView animateWithDuration:0.5 animations:^{ 
    self.view.alpha = 0; 
} completion:^(BOOL b){ 
    [self.presentingViewController dismissModalViewControllerAnimated:NO]; 
    self.view.alpha = 1; 
}]; 

कोड की यह पंक्ति 0 को देखने के अल्फा एनिमेट, तो (पूरा होने पर) प्रस्तुत दृश्य नियंत्रक को खारिज करते हुए और देखने के अल्फा वापस 1. करने के लिए सेट यह एक पारस्परिक है एनीमेशन।

+0

धन्यवाद, लेकिन स्वयं और H2CO3 दोनों ही इस तथ्य को अनदेखा कर रहे हैं कि मेरे कोड में अवधि अवधि है। कम कोड के साथ यह निर्धारित करने का कोई तरीका नहीं है कि फीका इन/आउट कितना समय लेना चाहिए। और मेरी पोस्टिंग कहती है ".. लेकिन एक समय अवधि में नहीं"। माफी माँगने के लिए शायद यह कहना चाहिए था कि कैसे फीका बाहर निकालना है और इसकी अवधि को नियंत्रित करना है, लेकिन मैंने सोचा कि यह पोस्ट और विवरण कोड से स्पष्ट था, क्षमा करें अगर यह नहीं था। – Gruntcakes

+0

टिप्पणी के जवाब में संपादित – NJones

+4

ऐसा लगता है कि आईओएस 8 में आपको self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve को भी प्रस्तुत करने की आवश्यकता है ViewController, तो खारिज भी crossDissolve है –

9

UIViewController के डॉक्स में, हम पा सकते हैं:

@property(nonatomic, assign) UIModalTransitionStyle modalTransitionStyle 

सेट UIModalTransitionStyleCrossDissolve को यह संपत्ति और इसे ठीक से भंग होगा :)

आशा है कि मदद करता है।

+0

धन्यवाद, यह घुल जाता है, लेकिन यह तुरंत होता है, जबकि मेरे पास इसकी उपस्थिति पर .5 दूसरी एनीमेशन है। मैं इसे धीरे-धीरे कैसे भंग कर सकता हूं? – Gruntcakes

+0

[ self.parentViewController dismissModalViewControllerAnimated: YES]; –

+0

एनिमेटेड सेट करना: YES को इसे स्क्रॉल करना बंद कर देता है, एनिमेटेड सेट करना: NO को इसे विघटित कर देता है, लेकिन अभी भी तुरंत। मैंने अपना नवीनतम कोड उपरोक्त संपादन में पोस्ट किया है। – Gruntcakes

0

मुझे लगता है कि यह उन वीर लोग, जो अभी भी पूर्ण स्क्रीन मोड में और अभिविन्यास, जो एप्लिकेशन प्रमुख एक से अलग है साथ MPMoviePlayerViewController उपयोग करने के लिए कोशिश करता है के लिए उपयोगी हो सकता है।

मैं सचमुच दिन काम रीति से रीति से या नहीं MPMoviePlayerViewController पेश के साथ खेल का आधा खर्च किया है। लेकिन संक्रमण एनीमेशन बदलने के अर्थ में, इसके साथ कोई भाग्य नहीं है। (मोडल मोड को अभिविन्यास सेट करने के लिए आवश्यक है जो ऐप प्रमुख अभिविन्यास से अलग है)।

मैंने वर्तमान दृश्य नियंत्रक या वर्तमान मॉड्यूल व्यू कंट्रोलर की कोशिश की, लेकिन परिणाम वही है। इससे कोई फर्क नहीं पड़ता कि modalTransitionStyle प्रॉपर्टी सेट किस प्रकार है, अगर मैं करता हूं [... dismissViewControllerAnimated: true ...] तो डिफ़ॉल्ट संक्रमण शैली (UIModalTransitionStyleCoverVertical) वैसे भी इस्तेमाल किया जाता है। मैंने आईओएस 5.1 डिवाइस और आईओएस 6 सिम्युलेटर में परीक्षण किया।

मैंने किसी अन्य प्रकार के नियंत्रकों की कोशिश नहीं की है ...इस बात को ध्यान में रखते हुए कि सामान्य नियंत्रक के पास विधि बर्खास्त है MoviePlayerViewController अनुमानित, मैं मान सकता हूं कि यह विधि किसी भी वीडियो नियंत्रक को खारिज करने के लिए उपयोग की जाती है, इससे कोई फर्क नहीं पड़ता कि यह कैसा दिखाई देता है। (प्रवेश कर संक्रमण के साथ-साथ मेरे लिए काम नहीं किया, सिवाय इसके कि वे (modalTransitionStyle बदलते) के मामले में CoverVertical के रूप में की प्रक्रिया नहीं किया।

तो, मेरे समाधान था सभी में संक्रमण एनिमेशन का उपयोग न। मुझे यकीन है , ऐप्पल के पास मूवीव्यू कंट्रोलर के लिए केवल कुछ निश्चित एनीमेशन की अनुमति देने के कुछ कारण थे (मुझे वास्तव में उम्मीद है, और यह "आलस्य" के कारण नहीं बनाया गया था), लेकिन अगर वे चाहते थे कि कुछ अच्छा अनुभव उपयोगकर्ता मिले, तो वे मेरे ऐप में विफल रहे यह तब भी बेहतर होता है जब वीडियो बिना किसी एनीमेशन के दिखाई देता है (जो निश्चित रूप से क्रॉसडिस्लोविंग से भी बदतर है) लेकिन यह बैरल कवरवर्टिकल से बेहतर है।

डेवलपर के पी से उस पर ध्यान देना विचार की बात यह है कि यह वास्तव में लगता है कि वे डिजाइनरों के लिए डेवलपर्स के अधिक सुखद और प्रभावी काम के बजाय ग्राहकों के लिए अच्छे आइकन पेंट करने के लिए अधिक पैसा खर्च करते हैं। (

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