

Objective-cにて、下記のコードを都度書かずにすむ方法を教えてください。

`CGSize sc = [[UIScreen mainScreen] bounds].size;`

端末の画面サイズを取得してレイアウトなどを行う際に、毎回記載を行っているのですが、どこに宣言すればよいのでしょうか？

よろしくお願いします。


CC BY-SA 4.0
2018-12-05T07:04:19.763
50920
2018-12-06T15:14:26.073
2018-12-06T11:37:37.847
14745
30839
question
ios xcode objective-c
Xcode 画面サイズ取得コードの使い回し　CGSize sc = [[UIScreen mainScreen] bounds].size;


スクリーンサイズ依存のコードはオートレイアウトをしっかり書く事でスクリーンサイズの実ピクセル数が必要になるケースはかなり減らせると思いますが、オートレイアウトとは別にという前提で回答します。

`UIApplication`のサブクラスを作成し、`screenSize`というリードオンリーのプロパティを定義し、`init`時にscreenSizeを実行するのはいかがでしょうか？

サンプルコードは以下の様になります

[アプリケーション名].h

[code]

    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface [アプリケーション名] : UIApplication
    @property(readonly) CGSize  screenSize;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
[/code]

[アプリケーション名].m

[code]

    #import "[アプリケーション名].h"
    
    @implementation [アプリケーション名]
    @synthesize screenSize;
    
    - (nonnull instancetype) init
    {
        self = [super init];
        if (self) {
            screenSize = [[UIScreen mainScreen] bounds].size;
        }
    
        return self;
    }
    
    @end
    
[/code]

これを利用するためには、`info.plist`にアイテムを追加し、`principal class`を選び、右の欄に[アプリケーション名]を書きます。

あとは、`screenSize`を参照したいソースファイルに

[code]

    #import "[アプリケーション名].h"
    
[/code]

としておいてから、`screenSize`が必要な箇所で

[code]

    CGSize screenSize = (([アプリケーション名] *)[UIApplication sharedApplication]).screenSize;
    
[/code]

と、することでアプリケーション起動時に取得した`screenSize`が参照出来ます。

結局面倒くさいので、毎回書いてもそんなに変わらないと思いますが、参照する使い回したい変数(`readwrite`)や定数(`readonly`)が増えてくると案外有効なので参考になれば幸いです


CC BY-SA 4.0
2018-12-05T07:43:17.710
50924
2018-12-06T15:14:26.073
2018-12-06T15:14:26.073
14745
14745
50920
answer