2013-09-25 8 views
7

iOS7のアップグレード以降、私はUIImagePickerControllerという奇妙な動作をしています。このアプリケーションではcameraOverlayViewUIImagePickerControllerを使用しています。画面上にいくつかのカスタムコントロールを描画します透明な背景で、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; 

OverlayViewControllerUIViewControllerです:

はiOS6で、私は次のコードを使用して UIImagePickerControllerと呼ばれます。

enter image description here

しかし、今のiOS 7にカメラがステータスバーを通って引き込まれると黒のバーは、ライブカメラビューの下に表示されます。

これはのcameraViewTransformプロパティにCGAffineTransformMakeTranslationを適用することで解決できますが、これはどうしてこうですか?

+0

大好きです変換せずに修正できるかどうか聞いてみましょうか? – san

+0

問題を修正しましたか? – KarenAnne

+0

@Wim Haanstraこんにちは..あなたはこの問題を解決しましたか? –

答えて

1

iOS 7では、デフォルトでUIViewControllerビューはステータスバーを含む画面領域全体を占めます。

wantsFullScreenLayout 

は廃止され、無視されます。場合によっては、この修正はビューコントローラクラスで機能します。

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

その他の場合は、もう少し複雑です。ここに遅れているので、どうやってそれを見てください。

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

をそしてません: - 注意することは有益なことをのUIViewControllerで、次のコードは、それがCGRect数学を使用して、物事を揃える持つに来る必要があり、iOSの6とiOS 7の両方で正しいステータスバーの高さを与えますInterface Builderには、iOS 7用に設計してから、iOS 6を修正するためのオフセットを使用する新しい「iOS 6 delta」調整があることを忘れてください。

どうしたらいいか教えてください。

+0

最初の提案は何もしていないようです。 _pickerにも適用しようとしましたが、どちらも動作しません。 実際に私には正しいステータスバーの高さが与えられますが、カメラの「イメージ」はまだ小さく(フルスクリーンを満たすのに十分ではないため)、問題ではないようです。 –

+0

使用しているハードウェアは何ですか? – iosengineer

+0

別の調査パスでは、Revealをインストールして問題の詳細を把握できるかどうかを確認できます。 http://bit.ly/183QpvK – iosengineer

0

他のいくつかのSOスレッドなどに基づいて問題を理解したところ、UIImagePickerControllerは、[UIViewController -prefersStatusBarHidden]経由でステータスバーを管理するという点では期待していなかったことです。

これは、plistを使用してView Controllerステータスバーの管理を完全に無効にするか、UIImagePickerControllerに必要な操作を行わせる方法を見つけ出すことを意味します。あなたが前者を探していないという前提で、後者では、ピッカーを私が望むことをするラッパーコントローラーに入れて成功したと言います(ただし、検出/サポート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

関連する問題