2017-05-02 9 views
1

私は基本的には横長モードで動作するゲームを扱っています。 プロファイルPicを変更するオプションがあります。 profile picオプションは、プロファイルpic Image Viewに表示するIm​​age Pickerを開きます。 私の問題はios 7の向きを変更するとクラッシュするアプリケーション

イメージピッカーを開くと、アプリケーションは自動的に向きを縦向きに変更します。

これを解決するために、画像のアップロードボタンをクリックして画像を選択したときにユーザーの向きを取得しようとしましたが、強制的に元の向きに変更しています。 iPhone 5以降ではすべて正常に動作しています。しかし、ユーザーがピッカービューから画像を選択すると、iphone 4(ios7で実行中)がクラッシュします。次のエラーが表示されます。

preferredInterfaceOrientationForPresentationは、サポートされているインターフェイスの向きを返す必要があります。

私は、ユーザー

-(void)checkCurrentDeviceOrientation 
{ 
if([UIDevice currentDevice].orientation == 
UIDeviceOrientationLandscapeRight || [UIDevice 
currentDevice].orientation == UIDeviceOrientationLandscapeLeft) 
{ 
self.currentOrientation = [UIDevice currentDevice].orientation; 
} 
else 
{ 
self.currentOrientation = UIDeviceOrientationLandscapeRight; 
} 
} 

と方向を設定するには、このコードを使用しての向きを確認するために、このコードを使用しています。

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8")) 
{ 
if([UIDevice currentDevice].orientation == 
UIDeviceOrientationPortrait ||[UIDevice currentDevice].orientation == 
UIDeviceOrientationPortraitUpsideDown ) 
{ 

    NSLog(@"Chnaging Device Orientation to stored orientation"); 
    NSNumber *value = [NSNumber numberWithInt:self.currentOrientation]; 
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
} 
} 
else 
{ 
//Code For IPHONE 4 
} 

うまくいけば、すべてがIOS 7.0.1

事前に

おかげで実行されていないiphone 4ではなくios8以降で正常に動作します!

+0

[preferredInterfaceOrientationForPresentationの複製がサポートされているインターフェイスの向きを返す必要があります](http://stackoverflow.com/questions/12690963/preferredinterfaceorientationforpresentation-must-return-a-supported-interface-o) – Koen

答えて

0

現在、デバイスの向きを探して、デバイスを強制的に回転させる必要があるかどうかを確認します。あなたはまた、あなたのplistファイルにポートレートと風景の能力を追加する必要がありますし、あなたが電話をかけるためのメソッドを追加することはできません。

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    if(self.shouldAllowRotation) 
     return UIInterfaceOrientationMaskAll; 
    else 
     return UIInterfaceOrientationMaskPortrait; 
} 

し、各ビューであなたはそれが必要かどうかに応じて

[[AppDelegate instance] setShouldAllowRotation:NO]; 

を呼び出すことができます:あなたがづけし、変数shouldAllowRotationでアプリのデリゲートでは、このようなメソッドを追加しcaould例えば

回転するかどうか。ピッカーが呼び出されると、単にアプリのデリゲートを呼び出すと、自動回転し、それを聞かせて、これを使用すると、ナビゲーションコントローラ内の他のビューコントローラのスタックにビューコントローラをプッシュしている場合は、もつとも

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

を取得できるようになります、ランドスケープだけがうまくいくわけではありません。横長の制約付きビューコントローラはモーダルで表示する必要があります。

関連する問題