2013-09-25 11 views
7

iOS7 उन्नयन के बाद से, मैं UIImagePickerController की एक अजीब व्यवहार किया है। इस एप्लिकेशन में मैं का उपयोग cameraOverlayView के साथ कर रहा हूं। ,UIImagePickerController नहीं पूर्ण स्क्रीन

_picker = [[UIImagePickerController alloc] init]; 

if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) { 
    _picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    _picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 
    _picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; 
    _picker.showsCameraControls = NO; 
    _picker.navigationBarHidden = NO; 
    _picker.toolbarHidden = YES; 
    _picker.wantsFullScreenLayout = YES; 

    _overlayViewController = [[OverlayViewController alloc] init]; 
    _overlayViewController.picker = _picker; 
    _overlayViewController.frameSize = self.frameSize; 
    _overlayViewController.delegate = self; 
    _picker.cameraOverlayView = _overlayViewController.view; 
} 
else { 
    _picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

} 
_picker.delegate = self; 

कहाँ OverlayViewController एक UIViewController है एक पारदर्शी पृष्ठभूमि है जो स्क्रीन पर कुछ कस्टम नियंत्रण ड्रॉ के साथ:

iOS6 में मैं निम्नलिखित कोड का उपयोग कर UIImagePickerController कहा जाता है।

enter image description here

लेकिन अब iOS 7 में कैमरा स्थिति बार और एक काले रंग की पट्टी के माध्यम से तैयार किया जाता है लाइव कैमरा दृश्य नीचे दिखाई देता है।

मैं CGAffineTransformMakeTranslationUIImagePickerController की संपत्ति को लागू करके इसे हल कर सकता हूं, लेकिन ऐसा क्यों है?

+0

प्यार करोगे सुनने के लिए कि क्या आप इसे बिना किसी बदलाव के ठीक कर सकते हैं? – san

+0

क्या आपने इस मुद्दे को ठीक किया है? – KarenAnne

+0

@Wim Haanstra हाय..क्या आपको इस समस्या से गुजरना पड़ा? –

उत्तर

1

iOS 7 में, डिफ़ॉल्ट UIViewController देखा गया स्थिति पट्टी सहित पूरे स्क्रीन क्षेत्र तक लगते हैं।

wantsFullScreenLayout 

बहिष्कृत और अनदेखा किया गया है। कुछ मामलों में, यह सुधार (दृश्य नियंत्रक कक्षा में) काम करता है:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { 
    [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 

अन्य मामलों में, यह थोड़ा और अधिक जटिल है। यहां देर हो चुकी है, तो देखें कि आप इसके साथ कैसे जाते हैं। सहायक बातों का ध्यान रखना - एक UIViewController में, निम्न कोड दोनों iOS 6 और पर सही स्थिति बार ऊंचाई दे देंगे iOS 7, यह CGRect गणित का उपयोग कर बातें संरेखित करने के लिए होने के लिए आना चाहिए:

if (UIDeviceOrientationIsLandscape(self.interfaceOrientation)) { 
      statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.width; 
     } else { 
      statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; 
     } 

और फिर नहीं भूलें कि इंटरफ़ेस बिल्डर में, नया "आईओएस 6 डेल्टा" समायोजन है जो आपको आईओएस 7 के लिए डिज़ाइन करने की अनुमति देता है और फिर आईओएस 6 के लिए सही करने के लिए ऑफ़सेट का उपयोग करता है।

किसी भी तरह, मुझे बताएं कि आप कैसे जाते हैं।

+0

पहला सुझाव कुछ भी नहीं कर रहा प्रतीत होता है। इसे _picker पर लागू करने का भी प्रयास किया, लेकिन यह या तो काम नहीं करता है। दूसरा वास्तव में मुझे सही स्टेटसबार ऊंचाई देता है, लेकिन ऐसा लगता है कि यह समस्या नहीं है, क्योंकि कैमरे की "छवि" अभी भी छोटी है (पूर्ण स्क्रीन भरने के लिए पर्याप्त नहीं है)। –

+0

आप जिस हार्डवेयर का उपयोग कर रहे हैं वह क्या है? – iosengineer

+0

एक अन्य जांच पथ पर, आप प्रकट कर सकते हैं और देख सकते हैं कि यह आपको समस्या में अधिक अंतर्दृष्टि देता है या नहीं। http://bit.ly/183QpvK – iosengineer

0

कुछ अन्य SO धागे और इस तरह के मुद्दे पर मेरी समस्या की समझ यह है कि UIImagePickerController ऐसा नहीं करता है जो हम [UIViewController -prefersStatusBarHidden] के माध्यम से स्टेटस बार के प्रबंधन के मामले में अपेक्षा करते हैं।

इसका मतलब है कि आपको या तो पूरी तरह से दृश्य नियंत्रक स्टेटस बार प्रबंधन को प्लेस्ट के माध्यम से अक्षम करना होगा, या यूआईएममेज पिकर कंट्रोलर को जो भी करना है उसे करने के लिए एक तरीका पता लगाना होगा। इस धारणा पर कि आप पूर्व की तलाश नहीं कर रहे हैं, मैं कह सकता हूं कि पिकर को एक रैपर नियंत्रक में डालकर बाद में सफलता मिली है जो मैं चाहता हूं (लेकिन आपको अभी भी अपने पिछले कोड पर वापस आना चाहिए यदि आपको अभी भी आवश्यकता है का पता लगाने/समर्थन iOS6):

@interface PickerContainer : UIViewController 

@property (nonatomic, weak) UIImagePickerController* picker; 

@end 

@implementation PickerContainer 

- (void) setPicker: (UIImagePickerController*) picker 
{ 
    [self addChildViewController: picker]; 
    [picker didMoveToParentViewController: self]; 

    self->_picker = picker; 
} 

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.picker.view.frame = self.view.bounds; 
    [self.view addSubview: self.picker.view]; 
} 

// Will have no effect in ios6 -- see [-init] for that option 
- (BOOL) prefersStatusBarHidden { return YES; } 

- (id) init 
{ 
    if (! (self = [super init])) return nil; 

    if (detectThatThisIsIos6()) self.wantsFullScreenLayout = YES; 

    return self; 
} 

@end 

0

यह आप के लिए काम करेंगे, छोटा कैमरा, आप नीचे काले रंग का बार होगा, लेकिन यह उपकरण पट्टी द्वारा ओवरले हो जाएगी https://stackoverflow.com/a/15803947

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