Objective-Cで画面サイズを取得する方法9選

Objective-C言語を使ったiOSデバイスの画面サイズ取得方法のイメージObjctive-C
この記事は約23分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

スマートフォンのアプリケーション開発において、画面サイズの取得はデザインやユーザーインターフェースの最適化に不可欠です。

Objective-Cを使用してiOSアプリを開発する際にも、この情報は非常に重要です。

本記事では、Objective-CでiOSデバイスの画面サイズを取得するための9つの具体的な方法を、初心者でも理解しやすいように解説します。

これらの方法をマスターすれば、あなたのアプリはよりプロフェッショナルで使いやすいものになるでしょう。

●Objective-Cとは何か?

Objective-Cは、AppleのmacOSやiOSのアプリケーション開発に広く使用されるプログラミング言語です。

C言語をベースにしており、Smalltalk言語の影響を受けたメッセージ指向の特徴を持っています。

この言語は、iOSの初期から使われており、多くの従来のiOSアプリがこの言語で書かれています。

○Objective-Cの歴史と特徴

Objective-Cは1980年代にBrad CoxとTom Loveによって開発されました。

C言語の構文にオブジェクト指向機能を追加することで、ソフトウェア開発の効率性を高めることを目的としています。

Appleはこの言語をNeXTコンピュータの開発で採用し、その後iOSやmacOSの主要な開発言語となりました。

特に、Objective-Cは拡張性と動的なタイピングの特徴を持ち、ランタイムにおける柔軟なメソッド呼び出しを可能にします。

○Objective-Cでの開発環境の設定

Objective-Cの開発環境を設定するには、まずMacコンピュータにXcodeをインストールすることから始めます。

XcodeはAppleが提供する無料の統合開発環境(IDE)で、Objective-Cによるアプリ開発に必要なすべてのツールを含んでいます。

Xcodeをダウンロードした後、新しいプロジェクトを作成し、”Objective-C”を選択してプロジェクトのテンプレートとして利用することができます。

この環境を整えることで、Objective-Cを使用した開発をすぐに始めることが可能です。

●画面サイズの取得とは

iOSアプリ開発において、アプリケーションの見栄えを各デバイスに適応させるためには、画面のサイズを正確に取得し理解することが不可欠です。

Objective-Cを使用する開発者にとって、さまざまなデバイスでの画面サイズの取得方法を知ることは、使い勝手の良いアプリケーションを設計する上で重要なスキルの一つです。

画面サイズを取得することで、デバイスの種類や向きに応じてUIを動的に変更し、ユーザーにとって最適な体験を提供することができます。

○画面サイズ取得の重要性

画面サイズの取得は、アプリがサポートする必要のある様々なスクリーンサイズと解像度に適切に対応するために必要です。

特にiOSデバイスは多種多様なサイズで提供されており、これに伴いユーザーインターフェイスを適切にスケーリングすることが求められます。

例えば、テキストのサイズやボタンの配置をデバイスに適したものに調整するためには、具体的な画面の寸法をプログラム上で把握し、それに基づいて設計を行う必要があります。

○画面サイズを取得する前に確認すべきこと

画面サイズを取得する前に、現在のiOSデバイスの種類とそれに対応するスクリーンサイズの理解が必要です。

また、アプリケーションがサポートするiOSのバージョンによって、利用可能なAPIやメソッドが異なる場合があるため、開発するアプリケーションのターゲットとなるiOSバージョンを事前に確認しておくことも重要です。

さらに、画面サイズの取得は、デバイスがポートレートモード(縦持ち)かランドスケープモード(横持ち)かによっても変わるため、この両方の状態での寸法を取得できるようにする必要があります。

●画面サイズ取得の基本コード

Objective-Cを使ったiOSアプリ開発では、デバイスの画面サイズを取得することは基本中の基本です。

画面サイズを知ることは、アプリのレイアウトをデバイスに合わせて最適化する上で欠かせない作業となります。

ここでは、Objective-Cで画面サイズを取得する基本的な方法を説明します。

○サンプルコード1:基本的なUIScreenの使用法

Objective-Cで画面サイズを取得する最も基本的な方法は、UIScreenクラスを使用することです。

このクラスには、現在使用中のディスプレイの情報を表すプロパティが含まれています。

下記のコードスニペットは、デバイスの画面サイズを取得する方法を表しています。

// UIScreenを使用してデバイスのスクリーンサイズを取得する
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = CGRectGetWidth(screenBounds);
CGFloat screenHeight = CGRectGetHeight(screenBounds);

// コンソールに画面の幅と高さを出力する
NSLog(@"Screen Width: %f", screenWidth);
NSLog(@"Screen Height: %f", screenHeight);

このコードでは、mainScreenメソッドを通じてアクセスしたUIScreenオブジェクトのboundsプロパティから、画面の幅と高さを取得しています。

CGRectGetWidthCGRectGetHeight関数を使用して、boundsから幅と高さの値を取り出し、それをログに出力しています。

このコードを実行すると、コンソールには次のように現在の画面の幅と高さが出力されます。

Screen Width: 375.000000
Screen Height: 667.000000

○サンプルコード2:ビューのフレームを利用した取得法

アプリ内の特定のビューに対して画面サイズがどのように影響するかを知りたい場合は、そのビューのframeプロパティを使ってサイズ情報を取得することができます。

例えば、下記のコードは現在最前面にあるビューコントローラのビューのフレームサイズを取得する方法を表しています。

// ビューコントローラのビューのフレームからサイズを取得する
CGRect viewFrame = self.view.frame;
CGFloat viewWidth = CGRectGetWidth(viewFrame);
CGFloat viewHeight = CGRectGetHeight(viewFrame);

// コンソールにビューの幅と高さを出力する
NSLog(@"View Width: %f", viewWidth);
NSLog(@"View Height: %f", viewHeight);

実行すると、アプリの現在のビューの幅と高さがコンソールに表示されます。

これは、例えばユーザーがデバイスを回転させたときにビューのサイズを更新する際に有用です。

●画面の向きに対応したサイズ取得

iOSデバイスはポートレート(縦)モードとランドスケープ(横)モードの両方をサポートしています。

ユーザーがデバイスを回転させたとき、アプリケーションはこの新しい向きに応じてレイアウトを更新する必要があります。

Objective-Cでは、画面の向き変更を検知し、新しい向きに基づいて画面サイズを取得する方法を提供しています。

ここでは、デバイスの向きに基づいて画面サイズを取得するコードを紹介し、その応用について説明します。

○サンプルコード3:デバイスの向きを判断する

デバイスの向きを判断するには、UIDeviceクラスのorientationプロパティを使用します。

このプロパティはデバイスの現在の向きを返します。

下記のコードは、デバイスの向きをチェックし、それに応じて異なるアクションを取る方法を表しています。

// UIDeviceクラスのorientationプロパティを使用してデバイスの向きを取得する
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

// デバイスの向きに基づいて条件分岐
if (UIDeviceOrientationIsPortrait(deviceOrientation)) {
    // ポートレートモードの場合の処理
    NSLog(@"Device is in portrait mode.");
} else if (UIDeviceOrientationIsLandscape(deviceOrientation)) {
    // ランドスケープモードの場合の処理
    NSLog(@"Device is in landscape mode.");
}

このコードを実行すると、デバイスの向きが変わるたびにコンソールに現在の向きが表示されます。

これを利用して、アプリケーションで特定の向きを検出し、適切なレイアウトを設定することができます。

○サンプルコード4:向きに応じたサイズの調整

デバイスの向きが変わった際には、UIViewControllerviewWillTransitionToSize:withTransitionCoordinator:メソッドを使用して新しいサイズに対応します。

下記のコードは、画面の向きが変わるときに新しいビューサイズを取得する方法を表しています。

// UIViewControllerのサイズ変更通知メソッドをオーバーライドする
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    // トランジションコーディネーターとともにアニメーション変更を行う
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        // ここで新しいサイズに基づいたビューの更新を行う
        NSLog(@"New view size is: %f x %f", size.width, size.height);
    } completion:nil];
}

このコードは、向きの変更に伴ってビューのサイズが変更されるときに呼び出されます。

sizeパラメータは新しいビューのサイズを表し、この情報を使用してUIを更新します。

●異なるiOSデバイスでのサイズ取得

iOSデバイスは多種多様な画面サイズと解像度を持っています。

開発者として、異なるデバイスで一貫したユーザーエクスペリエンスを提供するには、各デバイスに適応するための正確なサイズ情報が必要です。

Objective-Cでは、デバイスのモデルやスクリーンの特性に合わせたサイズ取得の方法を理解し、それに応じたUIを設計する必要があります。

○サンプルコード5:デバイスタイプによる条件分岐

特定のiOSデバイスでのサイズを取得するためには、デバイスのモデルを識別し、それに応じた条件分岐を行うことができます。

下記のコードは、デバイスのモデルを判断する一般的な方法を表しています。

// デバイスモデルの識別
NSString *deviceModel = [UIDevice currentDevice].model;

if ([deviceModel isEqualToString:@"iPhone"]) {
    NSLog(@"It's an iPhone.");
    // iPhone用のサイズ取得処理を行う
} else if ([deviceModel isEqualToString:@"iPad"]) {
    NSLog(@"It's an iPad.");
    // iPad用のサイズ取得処理を行う
} else {
    NSLog(@"Unknown Device type.");
    // その他のデバイス用のサイズ取得処理を行う
}

このコードを実行すると、deviceModel変数を通して取得したデバイスモデルに基づいて、それぞれのデバイスタイプごとにカスタマイズされたログメッセージが表示されます。

○サンプルコード6:Auto Layoutを使った動的なサイズ調整

Auto Layoutは、異なる画面サイズやデバイスの向きに対応するための強力なツールです。

制約ベースのレイアウトを使うことで、各デバイスに適したUIを動的に作成することができます。

下記のコードは、Auto Layoutを使用した基本的なサンプルを表しています。

// Auto Layoutを使用して、異なる画面サイズに対応するビューを作成する
UIView *myView = [[UIView alloc] init];
myView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:myView];

// myViewの制約を設定する
NSLayoutConstraint *widthConstraint = [myView.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier:0.5];
NSLayoutConstraint *heightConstraint = [myView.heightAnchor constraintEqualToAnchor:self.view.heightAnchor multiplier:0.5];
NSLayoutConstraint *centerXConstraint = [myView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor];
NSLayoutConstraint *centerYConstraint = [myView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor];

// 制約をアクティブにする
[NSLayoutConstraint activateConstraints:@[widthConstraint, heightConstraint, centerXConstraint, centerYConstraint]];

このコードはmyViewという新しいビューを作成し、親ビューの中心に配置しています。

myViewの幅と高さは親ビューの50%に設定され、中央に配置されます。

このAuto Layoutの設定により、デバイスの向きや画面サイズが変更されたときでも、myViewは自動的にサイズと位置を調整します。

●画面サイズに基づくUIの最適化

画面サイズに基づいたUIの最適化は、アプリが多様なiOSデバイス上で見た目良く機能するために欠かせません。

異なるデバイスサイズに対応するためのUI設計は、利用者にとって快適なユーザーエクスペリエンスを生み出す鍵となります。

Objective-Cを使用した開発では、レスポンシブデザインの原則に従い、柔軟性と再利用可能性を持たせたコードを書くことが求められます。

○サンプルコード7:画面サイズに基づいたUIコンポーネントの配置

下記のサンプルコードは、異なる画面サイズに合わせてビューコンポーネントを動的に配置する方法を表しています。

このコードでは、Auto Layoutの視覚的形式言語を用いて、ビュー間の制約を簡潔に記述しています。

// ビューを作成して、Auto Layoutの視覚的形式言語を用いて制約を追加する
UIView *subview = [[UIView alloc] init];
subview.backgroundColor = [UIColor redColor]; // 色は分かりやすくするため赤に設定
subview.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:subview];

// subviewの左端、上端、右端に対する制約を追加する
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[subview]-|"
                                                               options:0
                                                               metrics:nil
                                                                 views:NSDictionaryOfVariableBindings(subview)];
[self.view addConstraints:constraints];

// subviewの上端に対する制約を追加する
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[subview(==100)]"
                                                      options:0
                                                      metrics:nil
                                                        views:NSDictionaryOfVariableBindings(subview)];
[self.view addConstraints:constraints];

このコードを実行すると、赤色のsubviewは親ビューの全幅に対して横に伸び、高さは100ポイントに設定されます。

constraintsWithVisualFormatメソッドを使って、文字列でビューの制約を定義しています。

●応用例:複数のデバイスでのレイアウト対応

iOSデバイスファミリーが拡大する中で、開発者は一つのアプリが異なる画面サイズと解像度に対応できるようにするための戦略が必要です。

UIの構築においては、単に画面の大きさだけでなく、異なるデバイス特有の機能や使用シナリオを考慮することが求められます。

Objective-CとAuto Layoutを使用して、柔軟性のあるUIを設計することで、これらの要件を満たすことができます。

○サンプルコード8:汎用的なレイアウト作成のためのコード例

下記のコード例は、Auto Layoutを使用して、異なるデバイスで共通のレイアウトパターンを持つビューを作成する方法を表しています。

このコードは、すべてのデバイスでビューが画面の中央に配置されるように設計されています。

// ビューを中央に配置するためのAuto Layoutの制約を追加する
UIView *centerView = [[UIView alloc] init];
centerView.backgroundColor = [UIColor blueColor]; // 色は分かりやすくするため青に設定
centerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:centerView];

// centerViewの制約を設定する
NSLayoutConstraint *centerXConstraint = [centerView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor];
NSLayoutConstraint *centerYConstraint = [centerView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor];
NSLayoutConstraint *widthConstraint = [centerView.widthAnchor constraintEqualToConstant:100];
NSLayoutConstraint *heightConstraint = [centerView.heightAnchor constraintEqualToConstant:100];

// 制約をアクティブにする
[NSLayoutConstraint activateConstraints:@[centerXConstraint, centerYConstraint, widthConstraint, heightConstraint]];

このコードを実行すると、青色のcenterViewビューが画面の中央に100×100ポイントの大きさで配置されます。

このようなレイアウトは、デバイスのサイズや向きに関係なく一貫したユーザー体験を提供します。

○サンプルコード9:iPadとiPhoneでの画面サイズの違いを利用したUI作成

iPadとiPhoneの画面サイズの違いを利用して、デバイスに適した特定のUIを作成することもできます。

例えば、下記のコードは、デバイスがiPadであるかどうかを検出し、それに応じたビューのレイアウトを設定します。

// デバイスタイプに基づいて異なるレイアウトを設定する
BOOL isDeviceiPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;

// iPad用ビュー
if (isDeviceiPad) {
    // iPad特有のレイアウトを設定するためのコード
    NSLog(@"Setting up for iPad");
    // ここにiPad用のレイアウトを設定するコードを追加
} else {
    // iPhone用ビュー
    NSLog(@"Setting up for iPhone");
    // ここにiPhone用のレイアウトを設定するコードを追加
}

実行すると、デバイスがiPadかiPhoneかに応じてコンソールにログが表示され、開発者はそれぞれのデバイスに合わせたUIを設計できます。

●注意点と対処法

Objective-Cで画面サイズを取得する際には、いくつかの注意点があります。

これらの注意点を理解し、適切な対処法を講じることで、アプリがさまざまなデバイスで適切に動作することを保証できます。

○画面サイズ取得時の一般的な問題と解決策

一般的な問題としては、異なるiOSバージョン間でのAPIの違いや非推奨になったメソッドの使用が挙げられます。

たとえば、古いiOSバージョンではUIScreenboundsプロパティがデバイスの向きに関わらず固定された値を返していましたが、iOS 8以降ではデバイスの向きに基づいて変化します。

解決策としては、最新のAPIを利用し、古いメソッドに依存しないコードを書くことが重要です。

また、APIの変更点を確認し、アプリが最新および古いバージョンのiOSの両方に対応しているかを確認することが求められます。

CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = CGRectGetWidth(screenBounds);
CGFloat screenHeight = CGRectGetHeight(screenBounds);

// iOSバージョンに応じた対応をする
if (@available(iOS 8.0, *)) {
    // iOS 8.0以上での処理
} else {
    // iOS 8.0未満での処理
}

このコードは、@availableを使用してiOSバージョンをチェックしており、異なるバージョンに適した処理を行うことができます。

○ソフトウェアおよびハードウェアの更新に伴う対応

新しいiOSデバイスやiOSのアップデートがリリースされると、新しい画面サイズや解像度が導入される可能性があります。

これに対応するためには、定期的にアプリをアップデートし、新しいデバイスやOSの特性を取り入れる必要があります。

また、Auto Layoutを使用することで、新しい画面サイズや解像度が追加されても、アプリのUIが適切にスケールするようにすることができます。

Auto Layoutは制約ベースのレイアウトシステムで、ビューコンポーネント間の関係を定義することにより、異なる画面サイズでの一貫したレイアウトを実現します。

●カスタマイズ方法

iOSアプリ開発では、異なるデバイスやOSバージョンに合わせたカスタマイズが不可欠です。

Objective-Cでは柔軟なアプローチとして、プログラムによる動的な画面サイズ取得や、デザインパターンに基づいたカスタマイズが可能です。

ここでは、これらのカスタマイズ方法について、具体的なコードと共に解説します。

○プログラムでの画面サイズの動的な取得と使用

動的な画面サイズ取得では、ランタイムにデバイスの画面サイズや向き、その他の要因を考慮し、適切なUI設定を行います。

下記のコードは、デバイスの画面サイズに基づいて、動的にビューのサイズを調整する一例です。

// ビューコントローラーのloadViewまたはviewDidLoadメソッド内
UIView *dynamicView = [[UIView alloc] init];
dynamicView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:dynamicView];

// dynamicViewに適用する制約を動的に変更する
// 例として、デバイスの幅に応じてサイドマージンを設定する
[NSLayoutConstraint activateConstraints:@[
    [dynamicView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor constant:10.0],
    [dynamicView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor constant:-10.0],
    [dynamicView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:10.0],
    [dynamicView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor constant:-10.0]
]];

// サイズが変更される場合の対応
- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
    // 画面の向きやサイズが変わった際のdynamicViewのサイズ調整ロジックをここに記述
}

このコードでは、ビューのleadingtrailingアンカーを親ビューの対応するアンカーに対して制約を設定しており、safeAreaLayoutGuideを使用してセーフエリア内での配置を保証しています。

これにより、さまざまな画面サイズやセーフエリアの変更に柔軟に対応するビューレイアウトが作成されます。

○デザインパターンに応じたカスタマイズ例

適切なデザインパターンを選択することも、カスタマイズの一部です。

たとえば、ユニバーサルアプリを設計する場合は、マスター/ディテールのデザインパターンが有効です。

このパターンを使用すると、iPadでは分割ビューを、iPhoneでは一連の連動するビューを表示するなど、一つのコードベースで複数のデザインを実現できます。

if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    // iPad用のマスター/ディテールビュー設定
} else {
    // iPhone用のシンプルなリストビュー設定
}

この戦略を取り入れることで、コードの重複を避けつつ、デバイスごとの最適化されたユーザーエクスペリエンスを提供することができます。

まとめ

Objective-Cを使用したiOSアプリ開発では、画面サイズの取得とその応用は、開発者が直面する一般的な課題の一つです。

この記事では、Objective-Cによる画面サイズ取得の基本から応用、そしてカスタマイズ方法に至るまで、幅広くカバーしました。

このガイドを通じて、初心者から経験豊富な開発者まで、Objective-CによるiOSアプリ開発の基本的な概念を深く理解し、実践的なスキルを磨くことができたでしょう。

これからも、アプリ開発において、本記事が役立つリソースとなることを願っています。

アプリの成功と、ユーザーに喜ばれる素晴らしい製品の提供をお祈りしています。