6

このコードを使用して、画面の幅と高さを取得しました。

    float scaleFactor = [[UIScreen mainScreen] scale];
    CGRect screen = [[UIScreen mainScreen] bounds];
    CGFloat widthInPixel = screen.size.width * scaleFactor;
    CGFloat heightInPixel = screen.size.height * scaleFactor;

    NSLog(@"%f",widthInPixel);
    NSLog(@"%f",heightInPixel);

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    NSLog(@"screenBounds W %f",screenBounds.size.width);
    NSLog(@"screenBounds H %f",screenBounds.size.height);

ただし、縦向きモードと横向きモードの両方で同じ width= 768 と height=1024 を示しています..

4

4 に答える 4

16

これは、適切な説明に役立ちます-画面の向きに依存する高さと幅を取得する方法は?

そして、提案されたものと同じマクロを定義する方法の 1 つが、便利なマクロです: .

#define SCREEN_WIDTH (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] 境界].size.width : [[UIScreen mainScreen] 境界].size.height)
#define SCREEN_HEIGHT (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] 境界].size.height : [[UIScreen mainScreen] 境界].size.width)
于 2013-07-12T09:17:59.810 に答える
0

デバイスを回転させているとき、またはアプリケーションを横向きモードで実行しているときに、幅の高さを取得しますか?

デバイスを回転させている場合、didRotateToInterfaceOrientation で新しい幅と高さを取得することはありません。

メソッドviewWillLayoutSubviewsをオーバーライドする必要があります。ここで新しい幅と高さを取得し、デバイスの向きが変更されたかどうかを確認して、新しい寸法を使用できます。ビューが変更されるたびに viewWillLayoutSubviews が呼び出されるため、関数を実装する前に Apple のドキュメントをよく読んでください。

于 2013-07-12T09:22:01.963 に答える
0

これは、使用mainScreenしていて、デバイスの向きをまったく考慮していないためです。

すべての方向でログを記録するメソッドを実装しない限り、常に同じ値を返すことになります。

このようなことを試してください:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
{       
//log here

} else {
// log here
}
于 2013-07-12T09:11:51.293 に答える