IOSアプリを開発し、iOS6デバイスでテストしました。テスト中、アプリが向きの変更に期待どおりに応答しないことに気付きました。
ここに私のコードがあります:
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
正確には、iOSの向きの変更でどのメソッドが呼び出されるかを知りたいです。
あなたはこれを試すことができます、あなたを助けるかもしれません:
OR
目的-c:
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]
スイフト:
if UIDevice.current.orientation.isLandscape {
// Landscape mode
} else {
// Portrait mode
}
これを試して問題を解決できます。
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
以下のリンクを参照してくださいApp extension
デバイスの現在の向きを取得する(アプリ拡張機能)
たぶんばかげているかもしれませんが、それは動作しています(ViewControllerのみ):
if (self.view.frame.size.width > self.view.frame.size.height) {
NSLog(@"Hello Landscape");
}
@property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;
/ * ViewDidloadまたはViewWillAppearでこれらのコードを宣言する必要があります* /
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}
/ *現在、デバイスの向きを変更するたびにデバイスから通知が送信されるため、現在の向きを使用してコードまたはプログラムを制御できます* /
- (void)deviceOrientationDidChange:(NSNotification *)notification
{
//Obtaining the current device orientation
/* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */
self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];
// Do your Code using the current Orienation
}
IDevice のドキュメントに従ってください。
電話する必要があります
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
その後、方向が変更されるたびに、UIDeviceOrientationDidChangeNotificationを受け取ります。
このチュートリアル は、UIDeviceOrientationDidChangeNotification
を使用してデバイスの回転を処理する方法の簡単な概要を示します。 UIDeviceOrientationDidChangeNotification
を使用して、デバイスの向きが変更されたときに通知される方法を理解するのに役立ちます。
UIDevice.current.orientation.isLandscape
受け入れられた回答は、上記のようにデバイスの向きを読み取ります。これは、特にデバイスがほぼ水平の位置に保持されている場合、View Controllerの向きとは異なる方法で報告できます。
view controllerの向きを取得するには、そのinterfaceOrientation
プロパティを使用できます。このプロパティは、iOS 8.0から廃止されましたが、引き続き正しく報告されます。
ViewControllerでは、didRotateFromInterfaceOrientation:
メソッドを使用して、デバイスが回転したことを検出し、あらゆる方向で必要なことを実行できます。
例:
#pragma mark - Rotation
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation) {
case 1:
case 2:
NSLog(@"portrait");
// your code for portrait...
break;
case 3:
case 4:
NSLog(@"landscape");
// your code for landscape...
break;
default:
NSLog(@"other");
// your code for face down or face up...
break;
}
}