2010-01-12 9 views
16

आईफोन विंडो घूर्णन के लिए सिंगल-स्टेट और दो स्टेज एनीमेशन क्या हैं?आईफोन एप्स के लिए सिंगल स्टेज बनाम दो स्टेज एनीमेशन?

Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations. 

मैं किताब के माध्यम से काम कर रहा था:

यह "त्रुटि" संदेश मैं डिबगर कंसोल (कुछ भी नहीं दुर्घटनाओं) में मिलता है "iPhone विकास की शुरुआत: iPhone SDK तलाश" अप्रेस द्वारा (डेव मार्क , जेफ लामारे) स्वैप प्रोजेक्ट पर।

उत्तर

15

सब कुछ UIViewController Class Reference में समझाया गया है। विशेष रूप से देखें शीर्ष के पास रोटेशन अनुभाग देखें।

संदर्भ से

:

हैंडलिंग दृश्य घूर्णन

डिफ़ॉल्ट रूप से, पोर्ट्रेट मोड में ही देखा गया UIViewController वर्ग प्रदर्शित करता है। अतिरिक्त उन्मुखताओं का समर्थन करने के लिए, आपको shouldAutorotateToInterfaceOrientation: विधि को ओवरराइड करना होगा और किसी भी उन्मुखता के लिए आपके उप-वर्ग समर्थन के लिए YES वापस करना होगा। यदि आपके विचारों के ऑटोरेज़िंग गुण सही तरीके से कॉन्फ़िगर किए गए हैं, तो आपको बस इतना करना होगा। हालांकि, UIViewController क्लास अतिरिक्त हुक प्रदान करता है ताकि आप आवश्यकतानुसार अतिरिक्त व्यवहार लागू कर सकें।

अस्थायी रूप से सुविधाओं है कि आवश्यक नहीं हैं बंद करने के लिए है या नहीं तो उन्मुखीकरण परिवर्तन के दौरान कारण समस्याओं, आप willRotateToInterfaceOrientation:duration: विधि ओवरराइड कर सकते हैं हो सकता है और जरूरत कार्यों वहाँ प्रदर्शन करते हैं। इसके बाद आप didRotateFromInterfaceOrientation: विधि को ओवरराइड कर सकते हैं और अभिविन्यास परिवर्तन पूर्ण हो जाने के बाद उन सुविधाओं को पुन: सक्षम करने के लिए इसका उपयोग कर सकते हैं।

आप एक ओरिएंटेशन परिवर्तन के दौरान कस्टम एनिमेशन प्रदर्शन करने के लिए चाहते हैं, तो आपके पास दो से एक तरीके से ऐसा कर सकते हैं। अभिविन्यास परिवर्तन पर दो चरणों में होते हैं, अधिसूचना प्रारंभिक, मध्य, और घूर्णन के अंतिम बिंदु पर होने वाली अधिसूचनाओं के साथ होता है। हालांकि, आईफोन ओएस 3.0 में, समर्थन एक चरण में परिवर्तन करने के लिए जोड़ा गया था। एक-चरण अभिविन्यास परिवर्तन का उपयोग पुराने दो-चरण प्रक्रिया की तुलना में तेज होता है और आमतौर पर किसी भी नए कोड के लिए अनुशंसित किया जाता है।

एक एक कदम उन्मुखीकरण परिवर्तन के लिए एनिमेशन जोड़ने के लिए, willAnimateRotationToInterfaceOrientation:duration: विधि ओवरराइड और आपकी एनिमेशन करने के लिए। पुराने दो कदम विधि का उपयोग करने के लिए, हर कदम से पहले अपने एनिमेशन कॉन्फ़िगर करने के लिए एक या एक से willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: और willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: तरीकों में से दोनों को ओवरराइड।आपको केवल एक तकनीक चुननी होगी और उस तकनीक से जुड़े विधियों को ओवरराइड करना होगा। यदि आप दो-चरण तकनीक से जुड़े विधि को ओवरराइड करते हैं, तो व्यू कंट्रोलर डिफ़ॉल्ट रूप से तकनीक का उपयोग करता है।

+2

दुर्भाग्य से यह मदद नहीं करता है। मैं किसी भी अभिविन्यास सुविधाओं का उपयोग नहीं कर रहा हूं और यह त्रुटि अभी भी होती है। ओएस 4 में एक बग प्रतीत होता है। – typeoneerror

+0

यह उत्तर कुछ स्थितियों के लिए सही है, लेकिन दूसरों को नहीं। निश्चित रूप से, दस्तावेज़ों में वह अनुभाग पूरी तरह से त्रुटि की व्याख्या नहीं करता है - ऐप्पल के UIImagePickerController/presentModalController में विशिष्ट बग हैं जो इस त्रुटि संदेश को ट्रिगर कर रहे हैं (और जो इसे ट्रिगर नहीं करना चाहिए)। अभी भी एक कामकाज खोजने की कोशिश कर रहा है :( – Adam

+0

@ एडम: http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontroller – geon

3

मैं willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: विधि से willAnimateRotationToInterfaceOrientation:duration: विधि और चेतावनी में बदल गया।

धन्यवाद।

1

एड मार्टी का जवाब सही है। इसका कारण यह होगा कि यदि आप किसी भी रोटेशन एनीमेशन को ओवरराइड नहीं कर रहे हैं तो संभव है कि आप कुछ हद तक .. Yutorotate को "YES" जवाब दें। यदि आप घूर्णन को बिल्कुल लागू नहीं करते हैं, तो आपको केवल चाहिएऑटोरोटेट .. विधि को ओवरराइड नहीं करना चाहिए। यदि आप उस विधि को ओवरराइड करते हैं, तो बस एक चरण रोटेशन विधि को ओवरराइड करें और इसे सुपर के साथ पास करें।

3

मैं अपने मामले UIImagePickerController होने के लिए दोषी पाया है (मैं भी किसी भी रोटेशन एनीमेशन ओवरराइड नहीं):

[आत्म presentModalViewController: imagePicker एनिमेटेड: हाँ];

एक सामान्य UIViewController के साथ imagePicker को प्रतिस्थापित करने से कोई चेतावनी उत्पन्न नहीं होती है।

+0

मुझे UIImagePickerController के लिए एक ही समस्या है क्या UIViewController में इसे बदले बिना त्रुटि को हटाने का कोई अन्य तरीका है? – karim

+1

आपने UIViewController का उपयोग करके UIImagePickerController के पैरामीटर कैसे निर्दिष्ट किए ?? – Joze

1

यदि आप आईओएस 4 का उपयोग कर रहे हैं और आपको यह चेतावनी मिल रही है, तो मुझे इससे छुटकारा पाने का एक तरीका मिला। आपकी info.plist में, "समर्थित इंटरफ़ेस उन्मुखता" नामक एक आइटम है। चुनें कि कौन सा उन्मुखता आपके एप्लिकेशन का समर्थन करती है और imagePicker लाने पर दो-चरण चेतावनियां दूर हो जाएंगी।

1

@plumiscles जवाब नहीं काफी काम किया है मेरे लिए - कोई आइटम 'समर्थित इंटरफ़ेस झुकाव' कहा जाता था, शायद b/c यह एक पुराने परियोजना है। लेकिन आपके द्वारा संपादित .plist फ़ाइल सीधे और जोड़कर एक ही प्रभाव प्राप्त कर सकते हैं इस:

<key>UIInterfaceOrientation</key> 
    <string>UIInterfaceOrientationPortrait</string> 
0

मैं उन दो कदम किसी भी कार्य के सवारी खत्म नहीं हुआ था, लेकिन मैं अपने खुद के समारोह बुला रहा था जब मैं orientationChanged प्राप्त अधिसूचनाएं, और इसमें कोड की यह पंक्ति थी। इसे टिप्पणी करते हुए चेतावनी से छुटकारा पा लिया और ऑटो घुमाए जाने के लिए सही ढंग से काम करने की अनुमति दी। ऑटो घुमाव अभी भी आईओएस 4.2 तक कोड की इस पंक्ति के साथ काम किया, तो यह पूरी तरह से तोड़ दिया। ऑटोमोटेट में निर्मित 4.2 में काम करना बंद कर दिया गया है, इस बात की तलाश में बहुत समय लगा। शायद यह किसी और की मदद करेगा।

इस लाइन बाहर टिप्पणी की यह काम कर रहे हैं:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];

1

एक subview के रूप UIImagePickerController जोड़ने के लिए इस त्रुटि

[self.view addSubview:picker.view]; 
[self presentModalViewController:picker animated:NO]; 
0

मैं plist से "समर्थित इंटरफ़ेस झुकाव" हटाएँ है हल करने के लिए की आवश्यकता पंक्ति और चेतावनी गायब हो जाती है।

0

मुझे बस एक ही समस्या थी। मेरे मामले में एक मूर्खतापूर्ण गलती थी जिसे मैं यहां डाल रहा हूं, अगर कोई और उसी मुद्दे पर पड़ता है।

मेरी टैब्ड ऐप्लिकेशन में मैं मूल ViewControllers में से एक को हटाने और एक "सेटिंग" अनुभाग बनाने के लिए स्टोरीबोर्ड के साथ एक नया जोड़ा।

इस नए वीसी को एक टेबल व्यू वीसी होना था और यहां तक ​​कि मैंने बिना किसी समस्या के इसे डिज़ाइन, संकलित और चलाया, जब मैंने ऐप का अभिविन्यास बदल दिया, तो मुझे यह "दो चरण रोटेशन एनीमेशन का उपयोग करना" त्रुटि मिली।

मेरी समस्या यह थी कि मैं "UITableViewController" के लिए मूल .h फ़ाइल इंटरफ़ेस "UIViewController" में बदलना भूल गया था।

एक बार ऐसा करने के बाद मैंने स्टोरीबोर्ड पहचान बैज को सामान्य मूल्य से कक्षा को मेरे सेटिंग्स व्यू कंट्रोलर पर बदल दिया और यह उसका अंत था।

मुझे उम्मीद है कि यह किसी और की मदद कर सकता है। इस के नीचे जाने में मुझे थोड़ी देर लग गई।

चीयर्स,

1

मैं अंदर (कोई टैब्स) कोई दृश्य नियंत्रकों के साथ एक TabBarController बनाने के बाद इस मुद्दे को मिला है, यह चेतावनी एक बार मैं कम से कम एक दृश्य नियंत्रक इसे से जुड़े गायब हो गया।

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