2010-08-04 14 views
6

में अलग-अलग कार्य करता है मैंने अपने आईफोन और एसडीके को आईओएस 4.0.1 में अपग्रेड किया और अब मेरा ऐप आईओएस 3.x में चल रहा था जैसा ही नहीं चलता है।UIImagePickerController cameraViewTransform आईओएस 4

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

मैंने "कैमराट्रांसफॉर्म" नामक एक्सकोड टेम्पलेट परियोजनाओं का उपयोग करके एक व्यू-आधारित एप्लिकेशन बनाया, इसलिए मुझे दो कक्षाएं मिलीं: CameraTransformAppDelegate और CameraTransformViewController, ठीक है! CameraTransformViewController के viewDidAppear विधि में मैं निम्नलिखित कोड डाल:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 

    picker.sourceType = UIImagePickerControllerSourceTypeCamera;   
    picker.delegate = self; 

    //[self configurePicker_FirstAttempt:picker]; Use this! 
    //[self configurePicker_SecondAttempt:picker]; Use this too! 

    [self presentModalViewController:picker animated:YES]; 
} 

- (void)configurePicker_FirstAttempt:(UIImagePickerController*) picker { 
    picker.showsCameraControls = NO; 
    picker.navigationBarHidden = YES; 

    // not needed (use defaults) 
    //picker.toolbarHidden = YES; 
    //picker.wantsFullScreenLayout = YES; 
} 

- (void)configurePicker_SecondAttempt:(UIImagePickerController*) picker { 

    // Transform values for full screen support 
    CGFloat cameraTransformX = 1.0; 
    CGFloat cameraTransformY = 1.12412; 

    picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, cameraTransformX, cameraTransformY); 
} 

के साथ इस परियोजना चल रहा है/मुझे मिल गया:

  • दोनों configurePicker_FirstAttempt और configurePicker_SecondAttempt विधि कॉल टिप्पणी की: defaultPicker.png
  • केवल configurePicker_SecondAttempt विधि कॉल टिप्पणी: configurePicker_FirstAttempt.png
  • configurePicker_FirstAttempt और configurePicker_SecondAttempt विधि कॉल असम्बद्ध: configurePicker_SecondAttempt.png

नोट:

  1. आईओएस 3.x में मैं तल पर तीसरे दृष्टिकोण (दोनों तरीकों uncommented) का इस्तेमाल किया पिकर, जो "काली पट्टी" के बिना पूर्ण स्क्रीन मोड में शो था कॉन्फ़िगर करने के लिए ।
  2. मैंने picker.cameraViewTransform मूल मूल्य (स्केल किए जाने से पहले) का निरीक्षण किया और यह पहचान (अपेक्षित के रूप में) पर सेट है।
  3. picker.view.frame स्क्रीन सीमा के (0.0, 0.0, 320.0, 480.0)
  4. मैं (छोटा किए जाने के बाद) picker.cameraViewTransform करने के लिए एक अनुवाद जोड़ करने की कोशिश की पर सेट है, इस तरह: CGAffineTransformTranslate(picker.cameraViewTransform, 0.0, 20.0); और मुझे एहसास हुआ कि वहाँ कुछ हिस्सा था कि "कैमरा दृश्य" का छुपा था (शायद यह मूल 0.0, 0.0 नहीं था), इसलिए मुझे स्क्रीन पर और अधिक "कैमरा दृश्य" मिला।

ऐसा लगता है कि नए एसडीके में यूआईएममेज पिकर कंट्रोलर कुछ तरह से बदल गया है, शायद कैमरे के नियंत्रण में कुछ अलग-अलग आकार हैं।

क्या किसी को यह समस्या है?

+0

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

उत्तर

14

iOS 4.0 जादू संख्या 1936/320 = 6.05, 2592/6.05 = 428, 480-428 = 52 52/(428/2) = 0,24299 + 1 = 1,24299

ios 3.0 जादू संख्या 1536/320 = 4,8 2048/4,8 = 427 480-427 = 53 53/427 = 0,121412 + 1 = 1,12412

है कि रिश्ते cameraresolution-screenresolution

आईओएस 3.0 के लिए cameraViewTransform ऊपर से लागू किया जाता है तो आपको सभी ऊंचाई का उपयोग करना होगा। लेकिन आईओएस 4 में इसे फ्रेम के केंद्र से लागू किया जाता है ताकि आपको ऊंचाई के आधे हिस्से का उपयोग करना पड़े। और आपको केंद्र में फ्रेम छोड़ने के लिए फ्रेम को नीचे (52/2) स्थानांतरित करना होगा।

+0

हाय एला, क्या आपको केवल लैंडस्केप मोड में आईपैड कैमरा के लिए कोई विचार है ?? – iBhavik

2

मुझे आईफोन 4 के लिए नया पैमाने परिवर्तन ~ 1.25 (~ 1.12 के बजाय) मिल रहा है।

मैंने यह पता लगाने की कोशिश करने में कुछ मिनट बिताए कि ये जादू संख्या कहां से आती है - मुझे लगता है कि स्क्रीन रिज़ॉल्यूशन & कैमरा रिज़ॉल्यूशन के बीच कुछ प्रकार का रिश्ते है, लेकिन मैं जल्दी में इसे समझ नहीं पाया ...

यदि कोई करता है, तो कृपया एक उत्तर पोस्ट करें - मुझे जादू संख्या से नफरत है।

एफवाईआई आईफोन 4 का कैमरा res 2592x1936 है, जबकि आईफोन 3 जीएस 2048x1536 है।

4

मुझे आईओएस 3.0 के बारे में निश्चित नहीं है लेकिन आईओएस 4.0 के लिए कैमरा व्यूट्रांसफॉर्म फ्रेम के केंद्र से लागू होता है।अनुवाद अनुवाद को लागू करने से पहले आप इसे सत्यापित कर सकते हैं।

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 27.0); 
imagePickerController.cameraViewTransform = translate; 

आप देख सकते हैं कि इस केंद्र के लिए दृश्य ले जाता है। इसके बाद स्केलिंग ट्रांसफॉर्म लागू करें और आप देखेंगे कि यह स्क्रीन भरता है।

CGAffineTransform scale = CGAffineTransformScale(translate, 1.125, 1.125); 
imagePickerController.cameraViewTransform = scale; 

यदि अकेले स्केलिंग ट्रांसफॉर्म आईओएस 3 और कंपनी के लिए काम करता है तो ट्रांसफॉर्म को केंद्र शीर्ष जैसे विभिन्न एंकर पॉइंट पर लागू किया जाता है। आपको हमेशा दोनों दिशाओं में रैखिक रूप से स्केल करना चाहिए या आपकी छवि को तिरछा कर दिया जाएगा।

3

CGAffineTransformMakeTranslation सीधे कैमरे ViewTransform पर काम नहीं करेगा। तो, CGAffineTransformMakeTranslation को लागू करने के लिए CGAffineTransformScale का उपयोग करें।

float yOffset = 44.0; 
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, yOffset); 
self.cameraFeed.cameraViewTransform = CGAffineTransformScale(translate, 1, 1);