Xcode 3.2.6から4.6.2でのテンプレートの変化(2)〜AppDelegate

2013. 05. 28
旧版のアプリケーションデリゲートクラスにはプロジェクト名の接頭辞が付くのでHelloWorldAppDelegateになっています。

また『初めてのiOSプログラミング 第2版』ではストーリーボードを使用していないので、新版のプロジェクトは基本的に『ARC:オン/ストーリーボード:オフ』のものとなります。

ただし『ARC:オン/ストーリーボード:オン』や『ARC:オフ/ストーリーボード:オフ』のプロジェクトとの差異がある場合は、それついても補足します。



●ARCやストーリーボードの利用の可否

ARCは、既存のプロジェクトを継続して開発する、あるいは過去の非ARCライブラリを活用するなど必要性がある場合を除き、新規開発であれば標準で利用するものと思って良いでしょう。

ストーリーボードに関しては、既存のプロジェクトとの互換性から利用しない(できない)、nibファイルまたはコードでUIを構築するので必要としないなど、必ずしも優先的に利用を推奨するものではないようです。

ですが『初めてのiOSアプリケーション』でもストーリーボードを利用しているように、今後標準となる機能でしょうから、特段の理由やこだわりが無いのであれば活用すると良いでしょう。



●AppDelegate.hの比較

旧版と新版のAppDelegate.hのコードを比較します。

旧版)

#import <UIKit/UIKit.h>

@class HelloWorldViewController;

@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    HelloWorldViewController *viewController;
}


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet HelloWorldViewController *viewController;

@end

新版)

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end


1)スーパークラスの変更

アプリケーションデリゲートクラスのスーパークラスが、旧版ではNSObjectですが新版ではUIResponderになっています。

この理由は『ストーリーボードへの変換のリリースノート』の『アプリケーションデリゲートの構成』で以下のように説明されています。

『現在のXcodeテンプレートでは、アプリケーションデリゲートクラスはUIResponderを継承しています。
これはデリゲートのインスタンスがレスポンダチェーンに参加し、アプリケーションレベルのアクションの処理ができるようにするためです。
既存のアプリケーションでこのパターンの使用を用いていない場合、ストーリーボードのために採用する必要はありません。』



2)インスタンス変数の宣言の削除

旧版では宣言済みプロパティのインスタンス変数を宣言していますが、新版では宣言が削除されています。

これは『cockscomb.info/イマドキっ子の Objective-C』でも指摘されているように、『Objective-Cプログラミング言語』のp.38で以下のように説明されています。

『インスタンス変数は実装詳細であり、通常、クラス自身の外からアクセスされることはありません。さらに、実装ブロック内に宣言すること、あるいは宣言済みプロパティから自動生成させることも可能です。したがって通常は、インスタンス変数宣言をパブリックインターフェイスで行うべきではないので、波括弧も省略してください。』

つまり、クラス内部でしか使用しないインスタンス変数をヘッダファイルで宣言することは、必要なインターフェイスのみ公開するというカプセル化(情報隠蔽)に反するので止めようということです。

したがって必要なインスタンス変数はソースファイルで宣言することになります。


3)宣言済みプロパティの属性の変更

宣言済みプロパティの属性がretainからstrongに変更されています。

これはARC導入に因るものです。

ARCについては『What's New in iOS〜iOS 5.0〜自動参照カウント』や『ARCへの移行のリリースノート』を参照してください。


4)IBOutlet識別子の削除

旧版では宣言済みプロパティの宣言にIBOutlet識別子が挿入されていますが、新版では削除されています。

旧版はウィンドウおよびビューコントローラのインスタンスをnibファイル(MainWindow.xibとHelloWorldViewController.xib)で生成・初期化しているため、IBOutletで接続する必要があります。

しかし新版ではAppDelegate.mのapplication:didFinishLaunchingWithOptions:メソッド内で生成・初期化しているため、その必要がありません。



●AppDelegate.mの比較

旧版と新版のAppDelegate.mのコードを比較します。

旧版)

#import "HelloWorldAppDelegate.h"
#import "HelloWorldViewController.h"

@implementation HelloWorldAppDelegate

@synthesize window;
@synthesize viewController;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
}

- (void)applicationWillTerminate:(UIApplication *)application {
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
}

- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}


@end

新版)

#import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

- (void)applicationWillTerminate:(UIApplication *)application
{
}

@end


1)@synthesizeの削除

旧版ではヘッダファイルで宣言している宣言済みプロパティ(windowとviewController)を@synthesizeで実装していますが、旧版では削除されています。

これは『頭と尻尾はくれてやる!/Xcode 4.4でさよなら@synthesize』でも指摘されているように、『Xcode 4.4の新機能』の『Objective-C言語の機能』で以下のように説明されています。

『Objective-Cの@propertiesは、明示的に実装されていない時はデフォルトで合成されます。』

『デフォルトの@synthesize機能は、特別なSDKやランタイムサポートを必要としません。』


つまりXcode 4.4以降でプロジェクトを作成する場合、プログラマが手動によって@synthesizeを記述しない場合はコンパイラが自動でコード補完して合成するので、記述が不要になるということです。


2)プロパティのインスタンス変数の命名規則

新版のコードでは@synthesize文が省略されていますが、『初めてのiOSプログラミング 第2版』本文中のコードには@synthesize文があります(翻訳時はXcode 4.5ですが、原著はXcode 4.3.2のため)。

そこでは宣言済みプロパティのインスタンス変数名として、プロパティ名の頭にアンダースコアが付加されています。

Cocoa向け コーディングガイドライン』の改訂履歴を見ると、2012年2月16日の改訂で、

『ivar名に適した接頭辞は「_」であるという注釈を付記しました。』

とあるので、同日にリリースされたXcode 4.3による改訂かと思いましたが、2011年12月14日に発行されている『Start Developing iOS Apps Today』の補足『Start Developing iOS Apps Today(sup.2)〜Objective-Cコードの記述』の中で、

『インスタンス変数はプロパティとして同じ名前を持ちますが、アンダースコア接頭辞(_)を持ちます。』

とあるので、Xcode 4.3以前からということが分かります。

「よくわかるiPhoneアプリ開発の教科書」サポートサイト』の『補足情報(2012/05/24)』によると、

『これは、Xcode 4.2の自動生成から出るようになったもので、FilpsideViewController.mの最初の方で、
 @synthesize mySw = _mySw;
と指定されているものです。』


とあるので、Xcode 4.2からの自動生成でインスタンス変数名にアンダースコアが付くようになったようです。

アプリ開発記/Objective-Cの@synthesizeについて』で紹介されているように、『Objective-Cによるプログラミング』のp.47『プロパティの多くはインスタンス変数を使って実装されている』において、

『特に指定しなければ、このインスタンス変数の名前は、プロパティ名の先頭にアンダースコアを置い たものになります。たとえば、「firstName」というプロパティに対応するインスタンス変数は、 「_firstName」となります。
(中略)
アンダースコアがついているので、たとえば局所変数ではなく、インスタンス変数 であることがひと目で分かります。』


とあり、『Cocoa向け コーディングガイドライン』のp.21『プロパティ(Declared Property)とインスタンス変数』では、その理由の一端も説明されています。

『通常、インスタ ンス変数に直接アクセスすることはなく、アクセサメソッドを使用します(initメソッドとdealloc メソッドでは直接インスタンス変数にアクセスします)。これを効果的にシグナリングするために、 以下のようにインスタンス変数名の接頭辞にアンダースコア(_)を使います。』

かつては『GLFun(12)~Texture2Dクラス(1)』の『3)クラスのインターフェイス』で説明しているように、アンダースコアで始まる接頭辞はAppleが予約しているので使用禁止のはずでした。

現在は『Cocoa向け コーディングガイドライン』のp.9『表記規約』において、

『メソッド名に、プライベートを意味するプレフィックスとしてアンダースコア文字を使用することは避けてください(インスタンス変数名に、プレフィックスとしてアンダースコア文字を使用することは可能です)。この命名規約は、Appleにより使用されるものとして予約されています。』

と、インスタンス変数名に関しては制限が解除されたようです。

この辺に関しては、『Awaresoft/プロパティに対応するインスタンス変数の命名規則について』で非常に分かり易く解説されていますので、参照してください。


3)ウィンドウとビューコントローラのインスタンスの生成・初期化の差異

旧版のapplication:didFinishLaunchingWithOptions:メソッド内では、ビューコントローラのインスタンスをルートビューコントローラに設定し、キーウィンドウの設定とウィンドウの表示を行っています。

新版ではその処理の前にウィンドウとビューコントローラのインスタンスを生成・初期化を行っています。

これは『Xcode 3.2.6から4.6.2でのテンプレートの変化(1)〜main.m』の『3)UIApplicationMain関数の第4引数の指定』で説明しているように、ストーリーボード使用時の場合との互換性を保つため、ストーリーボード非使用時も一貫してアプリケーションデリゲートクラスでウィンドウとビューコントローラの生成・初期化を行っているものと思われます。
(『ストーリーボードへの変換のリリースノート』を参照してください。)

旧版ではウィンドウのインスタンスは、アプリケーションのメインnibファイルとしてHelloWorld-Info.plistのMain nib file base name(NSMainNibFileキー)で指定されているMainWindow.xibから生成・初期化され、IBOutlet識別子によってwindowプロパティと接続されます。

しかし新版ではHelloWorld-Info.plistにNSMainNibFileキーの指定が無く、MainWindow.xibも存在しないため、コードで生成・初期化を行っています。

ビューコントローラは、旧版ではMainWindow.xibから接続されているHelloWorldViewController.xibで生成・初期化されますが、新版ではコードでViewController.xibを読み込んで生成・初期化を行っています。


4)applicationDidReceiveMemoryWarning:メソッドの削除

旧版では自動生成されているapplicationDidReceiveMemoryWarning:メソッドが、新版では削除されています。

iOSアプリケーションプログラミングガイド』のp.134『メモリ不足警告を監視する』においても、その必要性は説明されているので削除された理由は分かりませんが、実際に開発を行う際には忘れずに実装するようにしましょう。


5)deallocの削除

What's New in iOS〜iOS 5.0〜自動参照カウント』や『ARCへの移行のリリースノート』で説明されているように、ARCを導入した場合はコンパイラが適切なdeallocメソッドを自動生成するため、(インスタンス変数以外のリソースを解放する必要がある場合を除き)deallocメソッドの呼び出しは禁止されています。



●ARC:オフ/ストーリーボード:オフの場合

#import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (void)dealloc
{
    [_window release];
    [_viewController release];
    [super dealloc];
}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

- (void)applicationWillTerminate:(UIApplication *)application
{
}

@end

ARCをオフにした場合、AppDelegate.mにdeallocメソッドが実装されます。

またapplication:didFinishLaunchingWithOptions:メソッドで生成・初期化しているウィンドウとビューコントローラのインスタンスは、autoreleaseメソッドで自動解放プールに追加されています。



●ARC:オン/ストーリーボード:オンの場合

ストーリーボードを導入した場合、HelloWorld-Info.plistのMain storyboard file base name(UIMainStoryboardFileキー)でMainStoryboard.storyboardファイルが指定され、ウィンドウとビューコントローラの生成・初期化がストーリーボードで行われます。

これに伴い、アプリケーションデリゲートクラスのコードも変わります。


1)AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

宣言済みプロパティはウィンドウだけで、ビューコントローラは宣言していません。


2)AppDelegate.m

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

- (void)applicationWillTerminate:(UIApplication *)application
{
}

@end

application:didFinishLaunchingWithOptions:メソッドでの、ウィンドウとビューコントローラのインスタンスの生成・初期化が無くなっています。

またnibファイルとは異なり、ストーリーボードでは(rootViewControllerプロパティによる)ルートビューコントローラの設定と、(makeKeyAndVisibleメソッドによる)ウィンドウの可視化も行われるようです。



参考文献

Apple/Objective-Cプログラミング言語

Apple/Cocoa向け コーディングガイドライン

Apple/Objective-Cによるプログラミング

Apple/iOSアプリケーションプログラミングガイド

cockscomb.info/イマドキっ子の Objective-C

頭と尻尾はくれてやる!/Xcode 4.4でさよなら@synthesize

「よくわかるiPhoneアプリ開発の教科書」サポートサイト

アプリ開発記/Objective-Cの@synthesizeについて

『Objective-Cプログラミング THE BIG NERD RANCH GUIDE』サポートページ/訳者補記1 Xcode 4.4のリリース時にObjective-Cに追加された機能

Awaresoft/プロパティに対応するインスタンス変数の命名規則について

初めてのiOSプログラミング 第2版初めてのiOSプログラミング 第2版
(2012/10/20)
Alasdair Allan

商品詳細を見る

Xcode 4.4の新機能

2013. 05. 16
Xcode 4.4はOS X v10.8とiOS 5.1をサポートする機能だけでなく、他のツールセットの強化も追加されています。

:常にXcodeの最新のドキュメントを持っているかを、DownloadsプリファレンスのDocumentationタブで確認してください。



●LLVM 4.0コンパイラ

Xcodeは以下の拡張を持つ更新されたLLVMコンパイラ version 4.0が含まれています。


・Objective-C言語の機能

  • リテラル構文はNSStringリテラルと同様の『@』演算子を使用して、NSArray、NSDictionary、そしてNSNumberオブジェクトをサポートします。

  • 添字はNSDictionaryやNSArrayを含め、Objective-Cのコンテナで有効です。
    『[ ]』構文規則を使用します。

  • Objective-Cの@propertiesは、明示的に実装されていない時はデフォルトで合成されます。

XcodeはOS X v10.7以降でのリテラル構文やオブジェクトの添字を使用するコードの後方互換をサポートしていますが、これらの機能を利用できるようにOS X v10.8 SDKを使用する必要があります。
デフォルトの@synthesize機能は、特別なSDKやランタイムサポートを必要としません。

:iOSの開発では、リテラル構文やオブジェクトの添字の使用はまだ実装されていません。
(※編注:iOS 6.0でサポートされるようになりました。『New Features in Xcode 4.5』を参照してください。)


・C++11標準のサポートの強化

  • ラムダ式が許可されており、Objective-C++でのブロックベースのAPIで相互運用が可能です。

  • 一般初期化リストがサポートされています。

  • 一般定数式(constexpr)がサポートされています



●Static Analyzerの改良

Xcodeの組み込みソースコード解析ツールは、ProductメニューのAnalyzeコマンドで起動し、APIやmallocの処理における一般的なセキュリティの誤りのために強化されています。

  • Static Analyzerのエンジンは、手続き間解析を使用して関数の境界に渡る複雑なバグを検出することができます。

  • より徹底的なメモリのチェックは、malloc-関連のメモリ管理と安全でないAPIの使用の検出のために作られています。



●AppKitの機能のための新しいInterface Builderのサポート

XcodeのInterface Builderは、新しいAppKitの機能のサポートが含まれています。

  • Autolocalization

  • 改良されたトラックパッドAPI

  • Auto Layoutの改良

  • CoreUIベースのUIのカスタマイズ

  • NSView API

  • ページング制御

  • ページ制御ビューの追加

:上記に列挙したInterface Builderの機能はOS X v10.8のサポートが必要です。



●Scene Kitエディタ

Xcode 4.4はScene Kit APIの使用をサポートするために、Collada DAEドキュメントとしてプロジェクトに含まれている、3Dシーンファイル用のビューアとエディタを導入しています。
Scene Kitエディタは3Dシーンのプレビューと微調整や、組み込みアニメーションの再生をすることができます。
またソースコードで使用するための情報のために、3Dシーンを検査することもできます。
Scene Kitエディタは、プロジェクトナビゲータのDAEファイルを選択することによって呼び出すことができます。

:Scene KitエディタはOS X v10.8以降が必要です。



●コード補完の強化

コード補完は現在、ドキュメントや特定のコードの断片に基づいて、リスト内の各項目の簡単な説明とクィックヘルプの統合された形式を持ちます。
コード補完ウィンドウ内に統合され、コード補完リストの上か下の欄に表示されます。

Xcodeは(フレームワークはプロジェクトに追加されているが、#importがファイルに含まれていない)現在のファイルにインクルードまたはインポートされていないコード補完時にシンボルを提供することができます。
可能な場合、Xcodeは自動インポートを完了するためにアンブレラヘッダを使用し、バイナリがリンクする必要があることを示す#errorで未リンクのシンボルを示します。
これは自動インポートの完了は、現在のワークスペース内で少なくとも一つのファイル内に既に表示されているシンボルに対してのみ利用可能であるという既知の制限です。
必要な場合、Text Editingプリファレンスでオフにすることができます。



●FindとSearchの追加

FindとSearchは3つの新しい機能を強化しました。

  • FindバーとSearchナビゲータに正規表現への単純な代替手段としてパターンを検出するためのサポートを追加しました。
    検索フィールドで虫眼鏡アイコンをクリックして、Insert Patternを選択します。

  • Findナビゲータは現在インデックス付きのシンボルへの参照の検索をサポートしています。
    FindナビゲータのStyleポップアップメニューからSymbolicを選択します。
    検索のこの形式はTextual検索よりもかなり速く、コメントや非ソースファイルからの結果を除外します。

  • Xcodeは現在の関数やメソッドの呼び出し元と呼び出し先を表示することができます。
    この機能はShow Related Itemメニュー、またはAssistantエディタを使用してjumpバーのポップアップメニューのCallersあるいはCalleesを選択することによってアクセスします。



●ソースエディタのJumpバーの強化

ソースエディタのjumpバーのポップアップメニューは現在、TODOやメソッドや関数内にある#pragma markのコメントを一覧表示します。



●トラックパッドの使用のためのジェスチャサポートの追加

ピンチ—ズームや2本指ダブルタップで、以下のエディタやビューアでズームレベルを変更することができます。

  • User Interfaceエディタ

  • Hexエディタ

  • Core Data Modelエディタ

  • Quicklookエディタ

  • OpenGL ESビューア

  • Instruments trackビュー

3本指シングルタップでクイックヘルプを呼び出します。

2本指スワイプでXcodeのヒストリ内で前後に移動します。



●通知の強化

Xcode 4.4はOS X v10.8のシステム全体で通知システムを構築し、警告通知を表示することができます。



参考文献

Apple/New Features in Xcode 4.4

0 CommentsPosted in 資料

UIViewクラス

2013. 05. 15
・継承
UIResponder : NSObject

・準拠
NSCoding
UIAppearance
UIAppearanceContainer
NSObject

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
iOS Viewプログラミングガイド

・宣言
UIPrintFormatter.h
UITextField.h
UIView.h



●概要

UIViewクラスは、画面上の矩形領域と領域内のコンテンツを管理するためのインターフェイスを定義します。
実行時には、ビューオブジェクトは領域内のコンテンツの描画を処理し、またコンテンツとの対話を処理します。
UIViewクラス自体は、背景色を持つ矩形領域を占める基本動作を提供します。
UIViewをサブクラス化し、必要な描画とイベント処理のコードを実装することによって、より洗練されたコンテンツを提供することができます。
またUIKitフレームワークは、簡単なボタンから複雑なテーブルまで使用できる標準的なサブクラスのセットが含まれています。
例えば、UILabelオブジェクトはテキスト文字列を、UIImageViewオブジェクトは画像を描画します。

ビューオブジェクトはアプリケーションとユーザが対話する主な方法なので、いくつかの責任を持っています。
その一部を以下に示します。
  • 描画とアニメーション
    • ビューはUIKitやCore Graphics、OpenGL ESなどの技術を使用して矩形領域内にコンテンツを描画します。
    • いくつかのビューのプロパティは新しい値にアニメーションすることができます。

  • レイアウトとサブビューの管理
    • ビューには0個以上のサブビューが含まれている場合があります。
    • 各ビューは親ビューに連動して、独自にデフォルトのサイズ変更動作を定義します。
    • ビューは必要に応じてサブビューのサイズや位置を定義することができます。

  • イベント処理
    • ビューはレスポンダであり、タッチイベントやUIResponderクラスによって定義されている他のイベントを処理することができます。
    • ビューは一般的なジェスチャ処理をするために、Gesture RecognizerをインストールするaddGestureRecognizer:メソッドを使用することができます。
ビューは他のビューを組み込んで洗練された視覚的な階層を生成することができます。
これは(スーパービューとして知られている)親ビューに(サブビューとして知られている)ビューを埋め込むことで親子関係を生成します。
通常サブビューの可視領域はスーパービューの境界でクリップされていませんが、iOSではclipsToBoundsプロパティを使って動作を変更することができます。
親ビューはサブビューをいくつでも含めることができますが、各サブビューが持てるスーパービューは一つだけで、サブビューを適切に配置する責任があります。

ビューのジオメトリはframeboundscenterプロパティによって定義されています。
frameはスーパービューの座標系内におけるビューの原点と大きさを定義し、一般的にビューのサイズや位置を調整するためにレイアウト時に使用されます。
centerプロパティはサイズの変更をせずに、ビューの位置を調整するために使用することができます。
boundsはビューの内部の大きさを定義しており、ほとんどはカスタム描画コードでのみ見られます。
frameのサイズ部分と境界矩形は対になっており、どちらかの矩形のサイズを変更すると両方のサイズが更新されます。

UIViewクラスの使用方法についての詳細は『iOS Viewプログラミングガイド』を参照してください。

:iOS 2.xでは、UIViewオブジェクトの最大サイズが1024 x 1024ポイントになっています。
iOS 3.0以降では、ビューはこの最大サイズに制限されていませんが、メモリの消費量によって制限されています。
ビューサイズは可能な限り小さく保つことが最大の利益となります。
実行されているiOSのバージョンに関わらず、画面の寸法より著しく大きなコンテンツはタイリングを検討する必要があります。


ビューの生成

プログラムでビューを生成するには、以下のようなコードを使用することができます。

CGRect viewRect = CGRectMake(10, 10, 100, 100);

UIView* myView = [[UIView alloc] initWithFrame:viewRect];

このコードはビューを生成し、スーパービューの座標系内の点(10, 10)の位置に(スーパービューへ一度追加されて)配置します。
別のビューへサブビューを追加するには、addSubview:メソッドを使用します。
iOSでは姉妹ビューを問題無く互いに重ねることができるので、複雑なビュー配置を行うことができます。
addSubview:メソッドは、他の姉妹の上に指定したビューを配置します。
insertSubView:aboveSubview:insertSubview:belowSubview:メソッドを使用して追加することにより、サブビューのz順序を指定することができます。
またexchangeSubviewAtIndex:withSubviewAtIndex:メソッドを使用して、既に追加されているサブビューの位置を交換することができます。

ビューを生成する時、ビューが正確にサイズ変更されるように、autoresizingMaskプロパティに適切な値を割り当てることが重要です。
ビューのサイズ変更は、主にアプリケーションのインターフェイスの向きが変更された時に発生しますが、それ以外の時にも発生する場合があります。
例えばsetNeedsLayoutメソッドを呼び出すと、ビューのレイアウトは強制的に更新されます。


ビューの描画サイクル

ビューの描画は必要に応じて発生します。
ビューを最初に表示する、あるいはレイアウト変更のために全てまたは一部を可視化する時に、システムはコンテンツの描画をビューに要求します。
ビューがUIKitやCore Graphicsを使用したカスタムコンテンツを含む場合、システムはビューのdrawRect:メソッドを呼び出します。
このメソッドの実装では、このメソッドを呼び出す前に自動的にシステムによって設定されている現在のグラフィックスコンテキストにビューのコンテンツを描画する責任があります。
これは画面に表示することができるビューのコンテンツの、静的視覚表現を生成します。

ビューの変更をする時の実際の内容は、ビューを再描画する必要があることをシステムに通知するという責務です。
これはビューのsetNeedsDisplaysetNeedsDisplayInRect:メソッドを呼び出すことによって行われます。
これらのメソッドは、次の描画サイクル中にビューを更新する必要があることをシステムに知らせます。
次の描画サイクルまでビューの更新は待機することになるので、複数のビューでこれらのメソッドを呼び出して同時に更新することができます。

:OpenGL ESを使用して描画する場合は、ビューのdrawRect:メソッドは呼び出されません。
代わりに、ビューの再描画が必要な時に適切な描画更新を開始するよう、貴方が決定します。
OpenGL ESを使用した描画についての詳細については『iOS OpenGL ES プログラミングガイド』を参照してください。

ビューの描画サイクルやサイクル内でのビューの役割についての詳細は、『iOS View プログラミングガイド』を参照してください。


アニメーション

いくつかのビューのプロパティを変更することでアニメーションを行うことができ、短時間でユーザに変更を伝えるアニメーションが生成できます。
UIViewクラスは実際にアニメーションを行うほとんどの処理を行いますが、欲しいアニメーションを行うプロパティの変更を示す必要があります。
アニメーションを開始する方法には異なる2つの方法があります。
  • iOS 4以降ではブロックベースのアニメーションメソッドを使用する。(推奨)
  • begin/commitアニメーションメソッドを使用する。
animateWithDuration:animations:などの)ブロックベースのアニメーションメソッドは、非常に簡単にアニメーションを生成できます。
一つのメソッドの呼び出しで、実行されるアニメーションとアニメーションのオプションを指定します。
しかしブロックベースのアニメーションはiOS 4以降でのみ利用可能です。
それより前のiOSのバージョンでアプリケーションを実行する場合は、アニメーションの開始と終了をマークするbeginAnimations:context:commitAnimationsクラスメソッドを使用する必要があります。

以下のUIViewクラスのプロパティはアニメーションすることができます。

    @property frame
    @property bounds
    @property center
    @property transform
    @property alpha
    @property backgroundColor
    @property contentStretch

アニメーションの構成についての詳細は『iOS View プログラミングガイド』を参照してください。


スレッディングの考慮事項

アプリケーションのユーザインターフェイスの操作は、メインスレッドで発生する必要があります。
したがって常にアプリケーションのメインスレッド上の実行中のコードから、UIViewクラスのメソッドを呼び出す必要があります。
厳密にはビューオブジェクト自身を生成する時は必要ではありませんが、他の全ての操作はメインスレッド上で行う必要があります


サブクラス化の注意

UIViewクラスは、ユーザとの対話を必要とするビジュアルコンテンツのため、サブクラス化が重要なポイントです。
UIViewのサブクラス化には多くの妥当な理由がありますが、基本的なUIViewクラスまたは標準システムビューでは必要とする機能が提供されていない場合のみ行うことを推奨します。
サブクラス化はビューを実装する部分とパフォーマンスの調整で、より多くの作業を必要とします。

サブクラス化を回避する方法についての詳細は、『サブクラス化の代替手段』を参照してください。


メソッドのオーバーライド

UIViewをサブクラス化する時、オーバーライドする必要があるごく少数のメソッドと、必要に応じてオーバーライドする可能性がある多くのメソッドがあります。
UIViewは高度な構成ができるクラスなので、『サブクラス化の代替手段』で説明しているように、カスタムメソッドをオーバーライドしなくても洗練されたビューの動作を実装する多くの方法があります。
一方、UIViewのサブクラスでオーバーライドを検討する可能性のあるメソッドを以下に示します。
  • 初期化:
    • initWithFrame:
      このメソッドを実装することを推奨します。
      また、このメソッドの代わりに、あるいは加えてカスタムの初期化メソッドを実装することもできます。
    • initWithCoder:
      Interface Builderのnibファイルからビューを読み込み、ビューに必要なカスタムの初期化を行う場合はこのメソッドを実装します。
    • layerClass
      ビューのバッキングストアに異なるCore Animationレイヤを使用する場合のみ、このメソッドを実装します。
      例えば描画にOpenGL ESを使用する場合、このメソッドをオーバーライドしてCAEAGLLayerクラスを返すようにしてください。

  • 描画と印刷:
    • drawRect:
      ビューにカスタムコンテンツを描画する場合に、このメソッドを実装します。
      ビューでカスタム描画を行わない場合は、このメソッドのオーバーライドは避けてください。
    • drawRect:forViewPrintFormatter:
      印刷中に異なるビューのコンテンツを描画する場合にのみ、このメソッドを実装します。

  • 制約:
    • requiresConstraintBasedLayout
      ビュークラスが適切な動作をするために制約が必要な場合、このクラスメソッドを実装します。
    • updateConstraints
      ビューとサブビュー間でカスタムの制約を生成する必要がある場合、このメソッドを実装します。
    • alignmentRectForFrame:frameForAlignmentRect:
      ビューが他のビューに対してどのように整列するかをオーバーライドする際に、このメソッドを実装します。

  • レイアウト:
    • sizeThatFits:
      サイズ変更操作中に通常とは異なるデフォルトのサイズを持つビューが必要な場合に、このメソッドを実装します。
      例えば、サブビューが正確に表示できないポイントにビューが縮小されることを防ぐために、このメソッドを使用する場合があります。
    • layoutSubviews
      制約や自動サイズ変更動作を提供するよりも、サブビューのレイアウトをより正確に制御する必要がある場合に、このメソッドを実装します。
    • didAddSubview:willRemoveSubview:
      サブビューの追加や削除を追跡する必要がある場合に、これらのメソッドを実装します。
    • willMoveToSuperview:didMoveToSuperview
      ビュー階層内で現在のビューの移動を追跡する必要がある場合に、これらのメソッドを実装します。
    • willMoveToWindow:didMoveToWindow
      別のウィンドウへのビューの移動を追跡する必要がある場合に、これらのメソッドを実装します。

  • イベント処理:

サブクラス化の代替手段


多くのビュー動作はサブクラス化を必要とせずに構成することができます。
メソッドのオーバーライドを始める前に、以下のプロパティや動作の修正が必要とする動作を提供するかどうかを検討してください。
  • addConstraint:
    ビューとそのサブビューのAuto Layout動作を定義します。

  • autoresizingMask
    スーパービューのフレームを変更した時のAuto Layout動作を提供します。
    これらの動作は制約と組み合わせることができます。

  • contentMode
    ビューのフレームとは対照的に、ビューのコンテンツのレイアウト動作を提供します。
    このプロパティは、どのようにコンテンツがビューに適合するようにスケーリングされ、キャッシュまたは再描画されるかに影響します。

  • contentStretch
    伸縮部分としてビューの一部を定義します。
    この動作は通常、ビューを毎回再描画するとパフォーマンスに影響と与えるような洗練されたレイアウトを必要とする、ボタンやその他可変ビューを実装するために使用されます。

  • hiddenまたはalpha
    ビューの描画されたコンテンツを非表示にしたりアルファを適用するのではなく、ビュー全体の透明度を変更します。

  • backgroundColor
    その色で描画するのではなく、ビューの色を設定します。

  • サブビュー
    drawRect:メソッドを使用してコンテンツを描画するのではなく、必要なコンテンツを画像やラベルのサブビューとして組み込みます。

  • Gesture Recognizer
    タッチイベントを自身で傍受して処理するためにはサブクラスではなく、ターゲットオブジェクトへのアクションメッセージを送信するためのGesture Recognizerを使用することができます。

  • アニメーション化
    自身で変化アニメーションを試みるのではなく、組み込みのアニメーションのサポートを使用してください。
    Core Animationが提供するアニメーションのサポートは高速かつ簡単に使用することができます。

  • 画像ベースの背景
    比較的静的なコンテンツを表示するビューの場合は、サブクラス化して自身で画像を描画する代わりに、Gesture RecognizerとUIImageViewオブジェクトの使用を検討してください。
    あるいはまた、一般的なUIViewオブジェクトを使用し、ビューのCALayerオブジェクトのコンテンツとして画像を割り当てることもできます。
アニメーションはサブクラス化や複雑な描画コードの必要とせずに、ビューに視覚的な変更を施す別の方法です。
UIViewクラスの多くのプロパティはアニメーション化でき、それらのプロパティの変更はシステムが生成するアニメーションの誘因になることを意味します。
アニメーションを開始し、後続の変更をアニメーション化する必要があることを示すコードは僅か一行です。
アニメーションのサポートについての詳細は『アニメーション』を参照してください。



●タスク

●ビューオブジェクトの初期化

– initWithFrame:

●ビューの視覚的外観の構成

  backgroundColor    プロパティ
  hidden    プロパティ
  alpha    プロパティ
  opaque    プロパティ
  clipsToBounds    プロパティ
  clearsContextBeforeDrawing    プロパティ
+ layerClass
  layer    プロパティ

●イベント関連の動作の構成

  userInteractionEnabled    プロパティ
  multipleTouchEnabled    プロパティ
  exclusiveTouch    プロパティ

●境界とフレーム矩形の構成

  frame    プロパティ
  bounds    プロパティ
  center    プロパティ
  transform    プロパティ

ビュー階層の管理

  superview    プロパティ
  subviews    プロパティ
  window    プロパティ
– addSubview:
– bringSubviewToFront:
– sendSubviewToBack:
– removeFromSuperview
– insertSubview:atIndex:
– insertSubview:aboveSubview:
– insertSubview:belowSubview:
– exchangeSubviewAtIndex:withSubviewAtIndex:
– isDescendantOfView:

●サイズ変更動作の構成

  autoresizingMask    プロパティ
  autoresizesSubviews    プロパティ
  contentMode    プロパティ
– sizeThatFits:
– sizeToFit
  contentStretch    プロパティ   iOS 6.0では非推奨

●サブビューのレイアウト

– layoutSubviews
– setNeedsLayout
– layoutIfNeeded

●制約ベースのレイアウトへの加入

+ requiresConstraintBasedLayout
– translatesAutoresizingMaskIntoConstraints
– setTranslatesAutoresizingMaskIntoConstraints:

●制約の管理

– constraints
– addConstraint:
– addConstraints:
– removeConstraint:
– removeConstraints:

●制約ベースのレイアウトでの測定

– systemLayoutSizeFittingSize:
– intrinsicContentSize
– invalidateIntrinsicContentSize
– contentCompressionResistancePriorityForAxis:
– setContentCompressionResistancePriority:forAxis:
– contentHuggingPriorityForAxis:
– setContentHuggingPriority:forAxis:

●制約ベースのレイアウトでのビューの整列

– alignmentRectForFrame:
– frameForAlignmentRect:
– alignmentRectInsets
– viewForBaselineLayout

●制約ベースのレイアウトのトリガ

– needsUpdateConstraints
– setNeedsUpdateConstraints
– updateConstraints
– updateConstraintsIfNeeded

●制約ベースのレイアウトのデバッグ

制約ベースのレイアウトのデバッグの詳細については『Cocoa Autolayout Release Notes』を参照してください。

– constraintsAffectingLayoutForAxis:
– hasAmbiguousLayout
– exerciseAmbiguityInLayout

●ビューの描画と更新

– drawRect:
– setNeedsDisplay
– setNeedsDisplayInRect:
  contentScaleFactor    プロパティ

●印刷用ビューコンテンツのフォーマット

– viewPrintFormatter
– drawRect:forViewPrintFormatter:

●Gesture Recognizersの管理

– addGestureRecognizer:
– removeGestureRecognizer:
  gestureRecognizers    プロパティ
– gestureRecognizerShouldBegin:

●ブロックによるビューのアニメーション

+ animateWithDuration:delay:options:animations:completion:
+ animateWithDuration:animations:completion:
+ animateWithDuration:animations:
+ transitionWithView:duration:options:animations:completion:
+ transitionFromView:toView:duration:options:completion:

●ビューのアニメーション

このセクションのメソッドの使用はiOS 4以降は推奨されません。
代わりにブロックベースのアニメーションメソッドを使用してください。

+ beginAnimations:context:
+ commitAnimations
+ setAnimationStartDate:
+ setAnimationsEnabled:
+ setAnimationDelegate:
+ setAnimationWillStartSelector:
+ setAnimationDidStopSelector:
+ setAnimationDuration:
+ setAnimationDelay:
+ setAnimationCurve:
+ setAnimationRepeatCount:
+ setAnimationRepeatAutoreverses:
+ setAnimationBeginsFromCurrentState:
+ setAnimationTransition:forView:cache:
+ areAnimationsEnabled

●状態の保存と復元

   restorationIdentifier property
– encodeRestorableStateWithCoder:
– decodeRestorableStateWithCoder:

●実行時のビューの識別

  tag    プロパティ
– viewWithTag:

●ビューの座標系間の変換

– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:

●ビュー内のヒットテスト

– hitTest:withEvent:
– pointInside:withEvent:

●ビューの編集セッションの終了

– endEditing:

●ビューの関連付け変更の観察

– didAddSubview:
– willRemoveSubview:
– willMoveToSuperview:
– didMoveToSuperview
– willMoveToWindow:
– didMoveToWindow



●プロパティ

alpha

レシーバのアルファ値です。

@property(nonatomic) CGFloat alpha

解説
このプロパティの値は0.0から1.0の範囲の浮動小数点の数値で、0.0は完全な透明を表し、1.0は完全な不透明を表します。
この値は現在のビューのみに影響を与えるもので、組み込まれているサブビューには影響を与えません。

このプロパティの変更はアニメーションすることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


backgroundColor

レシーバの背景色です。

@property(nonatomic, copy) UIColor *backgroundColor

解説
このプロパティの変更はアニメーションすることができます。
デフォルト値はnilで、これは透明な背景色をもたらします。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


bounds

独自の座標系でビューの位置とサイズを表す境界の矩形です。

@property(nonatomic) CGRect bounds

解説
画面上において、境界矩形はフレーム矩形としてビューと同じ可視部分を表します。
デフォルトでは境界矩形の原点は(0, 0)ですが、ビューの異なる部分を表示するにはこの値を変更することができます。
境界矩形のサイズはフレーム矩形のサイズと対になっており、どちらかの変更は他方に影響を与えます。
境界のサイズを変更すると、その中心点から相対的にビューが拡大または縮小します。
境界矩形の座標は常にポイントで指定されます。

フレーム矩形を変更すると、drawRect:メソッドを呼び出すこと無くレシーバを自動的に再表示します。
フレーム矩形を変更した時にdrawRect:メソッドを呼び出したい場合は、UIViewContentModeRedrawcontentModeプロパティを設定してください。

このプロパティの変更はアニメーションすることができます。

デフォルトの境界の原点は (0, 0)で、サイズはフレーム矩形のサイズと同じです。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


center

フレームの中心です。

@property(nonatomic) CGPoint center

解説
中心はスーパービューの座標系内にポイント単位で指定します。
このプロパティの設定を変更すると、それに応じてframeプロパティの値が変わります。

フレーム矩形を変更すると、drawRect:メソッドを呼び出すこと無くレシーバを自動的に再表示します。
フレーム矩形を変更した時にdrawRect:メソッドを呼び出したい場合は、UIViewContentModeRedrawcontentModeプロパティを設定してください。

このプロパティの変更はアニメーションすることができます。
アニメーションブロックの開始にはbeginAnimations:context:クラスメソッド、終了にはcommitAnimationsクラスメソッドを使用します。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


clearsContextBeforeDrawing


描画前にレシーバの境界を自動的にクリアする必要があるかどうかを決定するブール値です。

@property(nonatomic) BOOL clearsContextBeforeDrawing

解説
YESに設定した場合、描画バッファはdrawRect:メソッドが呼び出される前に、透明な黒で自動的にクリアされます。
この動作はビューのコンテンツが再描画される時に、残存する視覚的な人工物が存在しないことを保証します。
ビューのopaqueプロパティもYESに設定されている場合、ビューのbackgroundColorプロパティがnil以外である必要があり、そうでなければ描画エラーが発生します。
このプロパティのデフォルト値はYESです。

このプロパティの値をNOに設定した場合、ビューのコンテンツがdrawRect:メソッド内で適切に描画されることを保証する責任があります。
描画コードが既に厳しく最適化されている場合、ビューの一部のみを再描画する必要がある時に、このプロパティをNOに設定することで特にスクロール中のパフォーマンスを向上させることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


contentMode

境界が変更された時に、ビューがコンテンツをレイアウトする方法を決定するために使用されるフラグです。

@property(nonatomic) UIViewContentMode contentMode

解説
コンテンツモードは、ビューの境界が変更された時に、ビューのレイヤにキャッシュされたビットマップをどのように調整するかを指定します。
このプロパティは多くの場合、サイズ変更可能なコントロールの実装に使用され、通常contentStretchプロパティと組み合わせます。
毎回ビューのコンテンツを再描画する代わりに、(歪みを伴うか否かを含め)望むコンテンツの拡大縮小や、ビューの特定の位置への固定の指定に、このプロパティを使用することができます。

setNeedsDisplayまたはsetNeedsDisplayInRect:メソッドを呼び出すことによって、ビューのコンテンツの再描画を常に強制することができます。

このプロパティに割り当てることができる値のリストは、UIViewContentModeを参照してください。
このプロパティのデフォルト値はUIViewContentModeScaleToFillです。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


frame

スーパービューの座標系におけるビューの位置とサイズを表すフレーム矩形です。

@property(nonatomic) CGRect frame

解説
スーパービューの座標系におけるビューのサイズと位置を定義する矩形です。
ビューのサイズと位置をレイアウト操作する際に、この矩形を使用します。
このプロパティを設定すると、それに応じてcenterプロパティやbounds矩形のサイズで指定されたポイントが変更されます。

警告transformプロパティが恒等変換されていない場合、このプロパティの値は未定義であるため無視する必要があります。

フレーム矩形を変更すると、drawRect:メソッドを呼び出すこと無くレシーバを自動的に再表示します。
フレーム矩形を変更した時にdrawRect:メソッドを呼び出したい場合は、UIViewContentModeRedrawcontentModeプロパティを設定してください。

このプロパティの変更はアニメーションすることができます。
ただしtransformプロパティに非恒等変換が含まれている場合、frameプロパティの値は未定義で変更してはいけません。
その場合、代わりにcenterプロパティを使用してビューを再配置し、boundsプロパティを使用してサイズを調整することができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


hidden

レシーバを非表示にするかどうかを決定するブール値です。

@property(nonatomic, getter=isHidden) BOOL hidden

解説
このプロパティの値をYESに設定するとレシーバは非表示になり、NOにするとレシーバが表示になります。
デフォルト値はNOです。

非表示のビューはウィンドウから消え、入力イベントも受信しません。
しかしそのサブビューを含むスーパービューのリスト内には残っており、通常通り自動サイズ変更には参加しています。
サブビューを持つビューを非表示にすると、サブビューやその子孫も非表示にする効果があります。
この効果は暗黙であり、レシーバの子孫の非表示状態を変更するものではありません。

ウィンドウの現在のファーストレスポンダであるビューを非表示にすると、ビューの次に有効なキービューが新しいファーストレスポンダになります。

このプロパティの値はレシーバの状態のみに反映され、ビュー階層内のレシーバの祖先の状態を考慮していません。
したがってこのプロパティがNOでも、祖先が非表示の場合はレシーバがまだ非表示の可能性があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


layer

描画に使用する、ビューのCore Animationレイヤです。(読み込みのみ)

@property(nonatomic, readonly, retain) CALayer *layer

解説
このプロパティはnilになることはありません。
オブジェクトの実際のクラスは、layerClassメソッドによって返される値によって決定されます。
ビューはレイヤのデリゲートです。

警告:ビューはレイヤのデリゲートであるため、ビューを他のCALayerオブジェクトのデリゲートにしないでください。
また、このレイヤオブジェクトのデリゲートを変更しないでください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


multipleTouchEnabled

レシーバがマルチタッチイベントを処理するかどうかを示すブール値です。

@property(nonatomic, getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled

解説
YESに設定すると、レシーバはマルチタッチシーケンスに関連付けられた全てのタッチを受信します。
NOに設定すると、レシーバはマルチタッチシーケンスの内の最初のタッチイベントのみ受信します。
このプロパティのデフォルト値はNOです。

このプロパティがNOの場合でも、同じウィンドウ内の他のビューはタッチイベントを受信することができます。
排他的にマルチタッチイベントを処理するビューが必要な場合は、このプロパティとexclusiveTouchプロパティの両方をYESに設定してください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


opaque


レシーバが不透明かどうかを決定するブール値です。

@property(nonatomic, getter=isOpaque) BOOL opaque

解説
このプロパティはビューを扱う方法として描画システムにヒントを提供します。
YESに設定した場合、ビューは完全な不透明として描画システムで扱い、描画システムはいくつかの描画操作を最適化し、パフォーマンスを向上させることができます。
NOに設定した場合、描画システムは通常他のコンテンツとビューを合成します。
このプロパティのデフォルト値はYESです。

不透明ビューは完全に不透明コンテンツで境界を埋めることを想定しているため、コンテンツのアルファ値は1.0である必要があります。
ビューが不透明で、境界が満たされていない、またはコンテンツが完全にあるいは部分的に透明である場合の結果は予測できません。
ビューが完全にまたは部分的に透明な場合は、このプロパティの値を常にNOに設定する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


subviews

レシーバに直結しているサブビューです。(読み込みのみ)

@property(nonatomic, readonly, copy) NSArray *subviews

解説
このプロパティは、カスタムビュー階層に関連付けされたサブビューの取得に使用することができます。
配列内のサブビューの順序は画面上の表示順を反映しており、最後面のビューはインデックス0になります。

UIKitや他のシステムフレームワークで宣言されている複雑なビューの場合、ビューの全てのサブビューは一般的にプライベートとみなされ、随時変更されることがあります。
したがってシステムが提供するビューのこれらのタイプのサブビューを、取得や変更は行わないでください。
行った場合、将来のシステム更新時にコードが破損する可能性があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


superview

レシーバのスーパービューで、無い場合はnilになります。(読み込みのみ)

@property(nonatomic, readonly) UIView *superview

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


tag

アプリケーション内のビューオブジェクトを識別するのに使う整数です。

@property(nonatomic) NSInteger tag

解説
デフォルト値は0です。
このタグの値を設定することにより、後でビューを識別するために値を使用することができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


transform

境界の中心に対して、レシーバに適用する変換を指定します。

@property(nonatomic) CGAffineTransform transform

解説
変換の原点の値はcenterプロパティか、変更されている場合はレイヤのanchorPointプロパティで得られます。
(取得には、基礎となるCore Animationレイヤオブジェクトのlayerプロパティを使用します)
デフォルト値はCGAffineTransformIdentityです。

このプロパティの変更はアニメーションすることができます。
アニメーションブロックで、開始にはbeginAnimations:context:クラスメソッド、終了にはcommitAnimationsクラスメソッドを使います。
デフォルトでは全てcenter値(変更されている場合はanchorPoint値)です。

警告:このプロパティが恒等変換でない場合は、frameプロパティの値は未定義であるため無視する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h



●クラスメソッド

animateWithDuration:animations:

指定された期間を使用して、一つ以上のビューへの変更をアニメーションします。

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations

パラメータ
duration
アニメーションの合計時間を秒単位で指定します。
負の値または0を指定した場合は、アニメーションをしない変更になります。
animations
ブロックオブジェクトはビューにコミットする変更を含みます。
これはビュー階層内のビューのアニメーション可能なプロパティをプログラムで変更する場所です。
このブロックはパラメータを取らず、戻り値はありません。
このパラメータはNULL以外にする必要があります。

解説
このメソッドはUIViewAnimationOptionCurveEaseInOutUIViewAnimationOptionTransitionNoneアニメーションオプションを使用して、直ちに指定したアニメーションを実行します。

アニメーション中は、アニメーション化されているビューに対して一時的にユーザとの対話が無効になっています。
(iOS 5より前では、ユーザとの対話はアプリケーション全体で無効になっています。)

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h


animateWithDuration:animations:completion:

指定された期間と完了ハンドラを使用して、一つ以上のビューへの変更をアニメーションします。

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

パラメータ
duration
アニメーションの合計時間を秒単位で指定します。
負の値または0を指定した場合は、アニメーションをしない変更になります。
animations
ブロックオブジェクトはビューにコミットする変更を含みます。
これはビュー階層内のビューのアニメーション可能なプロパティをプログラムで変更する場所です。
このブロックはパラメータを取らず、戻り値はありません。
このパラメータはNULL以外にする必要があります。
completion
アニメーションシーケンスが終了した時に実行する、ブロックオブジェクトを指定します。
このブロックは戻り値を持たず、完了ハンドラが呼び出される前にアニメーションが実際に終了したかどうかを示す単一のブール引数を取ります。
アニメーションの期間が0の場合、このブロックは次の実行ループサイクルの開始時に実行されます。
このパラメータはNULLにすることができます。

解説
このメソッドはUIViewAnimationOptionCurveEaseInOutUIViewAnimationOptionTransitionNoneアニメーションオプションを使用して、直ちに指定したアニメーションを実行します。

例えば、ビューが完全な透明になるまでフェードして、その後ビュー階層から取り除く場合は以下のようなコードを使用します。

[UIView animateWithDuration:0.2
        animations:^{ view.alpha = 0.0; }
        completion:^(BOOL finished){ [view removeFromSuperview]; }];

アニメーション中は、アニメーション化されているビューに対して一時的にユーザとの対話が無効になっています。
(iOS 5より前では、ユーザとの対話はアプリケーション全体で無効になっています。)

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h


animateWithDuration:delay:options:animations:completion:

指定された期間、遅延、オプション、そして完了ハンドラを使用して、一つ以上のビューへの変更をアニメーションします。

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

パラメータ
duration
アニメーションの合計時間を秒単位で指定します。
負の値または0を指定した場合は、アニメーションをしない変更になります。
delay
アニメーションを開始する前に待機する時間を秒単位で指定します。
0の値を指定した場合は即時アニメーションを開始します。
options
アニメーションを実行する方法を示すオプションのマスクです。
有効な定数のリストはUIViewAnimationOptionsを参照してください。
animations
ブロックオブジェクトはビューにコミットする変更を含みます。
これはビュー階層内のビューのアニメーション可能なプロパティをプログラムで変更する場所です。
このブロックはパラメータを取らず、戻り値はありません。
このパラメータはNULL以外にする必要があります。
completion
アニメーションシーケンスが終了した時に実行する、ブロックオブジェクトを指定します。
このブロックは戻り値を持たず、完了ハンドラが呼び出される前にアニメーションが実際に終了したかどうかを示す単一のブール引数を取ります。
アニメーションの期間が0の場合、このブロックは次の実行ループサイクルの開始時に実行されます。
このパラメータはNULLにすることができます。

解説
このメソッドはビューで実行するアニメーションのセットを開始します。
animationsパラメータ内のブロックオブジェクトには、一つ以上のビューのプロパティをアニメーション化するためのコードが含まれています。

アニメーション中は、アニメーション化されているビューに対して一時的にユーザとの対話が無効になっています。
(iOS 5より前では、ユーザとの対話はアプリケーション全体で無効になっています。)
ユーザがビューと対話できるようにしたい場合は、optionsパラメータにUIViewAnimationOptionAllowUserInteraction定数を含めてください。

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h


beginAnimations:context:

begin/commitアニメーションブロックの開始を印します。

+ (void)beginAnimations:(NSString *)animationID context:(void *)context

パラメータ
animationID
アニメーション用にアプリケーションが提供する識別子です。
context
このアニメーションのセットに関連付けたいカスタムデータです。
アニメーションデリゲートメッセージに渡される情報で、セレクタはsetAnimationWillStartSelector:setAnimationDidStopSelector:メソッドを使用して設定します。

解説
このメソッドは、一つ以上のアニメーションの実行を指定したいことをシステムに伝えます。
このメソッドを呼び出した後、(setAnimation...クラスメソッドを使用して)アニメーションのオプションを構成し、ビューの希望するアニメーション可能なプロパティを変更します。
ビューのプロパティを変更し終えたら、設定を閉じてアニメーションをスケジュールに入れるためにcommitAnimationsメソッドを呼び出します。

必要に応じて(以前のアニメーションのセットをコミットする前にこのメソッドを再度呼び出すことによって)アニメーションのセットをネスト(入れ子に)することができます。
ネストしたアニメーションは一緒にまとめられ、ネストされたグループに異なるアニメーションのオプションを設定することができます。

setAnimationWillStartSelector:またはsetAnimationDidStopSelector:メソッドを使用して開始あるいは停止セレクタをインストールする場合、animationIDcontextパラメータに指定された値は実行時にセレクタに渡されます。
それらのセレクタに追加情報を渡すために、これらのパラメータを使用することができます。

このメソッドの使用はiOS 4.0以降では推奨されません。
代わりにアニメーションを指定するには、ブロックベースのアニメーションメソッドを使用する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


commitAnimations

begin/commitアニメーションブロックと、実行しているアニメーションのスケジュールの終了を印します。

+ (void)commitAnimations

解説
現在のアニメーションのセットが最も外側のセットである場合、アプリケーションが実行ループに戻った時に、このメソッドはアニメーションを開始します。
現在のアニメーションのセットが他のセットの中にネストされている場合、このメソッドはアニメーションの最も外側のセットがコミットされるまで待機し、その時に全てのアニメーションがコミットします。

アニメーションはアプリケーションの妨害を回避するように、別のスレッドで実行されます。
このように、複数のアニメーションは互いの上に積むことができます。
別のアニメーションが進行している間にアニメーションを開始する方法については、setAnimationBeginsFromCurrentState:を参照してください。

このメソッドの使用はiOS 4.0以降では推奨されません。
代わりにアニメーションを指定するには、ブロックベースのアニメーションメソッドを使用する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


layerClass

このクラスのインスタンス用のレイヤの生成に使用するクラスを返します。

+ (Class)layerClass

戻り値
ビューのCore Animationレイヤの生成に使用するクラスを返します。

解説
このメソッドはデフォルトでCALayerクラスのオブジェクトを返します。
サブクラスはこのメソッドをオーバーライドし、必要に応じて異なるレイヤクラスを返すことが出来ます。
例えば描画にOpenGL ESを使用する場合、このメソッドをオーバーライドしてCAEAGLLayerクラスのクラスオブジェクトを返します。

このメソッドは、対応するレイヤオブジェクトを生成するために、ビューの生成の初期に一度だけ呼び出されます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setAnimationCurve:

アニメーションブロック内のプロパティの変更をアニメーションする時に使用するカーブを設定します。

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

解説
メソッドのbegin/commitセットを使用してアニメーションを指定する場合、アニメーションに使用するカーブの種類の指定するためにこのメソッドを使用することができます。
アニメーションブロックの外部から呼び出した場合、このメソッドは何もしません。
beginAnimations:context:commitAnimationsメソッドの呼び出しの間で呼び出す必要があります。
そしてビューのアニメーション可能なプロパティを変更する前に、このメソッドを呼び出す必要があります。
デフォルト値はUIViewAnimationOptionCurveEaseInOutです。

このメソッドの使用はiOS 4.0以降では推奨されません。
代わりにアニメーションとアニメーションカーブのオプションの指定にanimateWithDuration:delay:options:animations:completion:メソッドを使用する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setAnimationDuration:

アニメーションブロックでアニメーションの期間を(秒単位で)設定します。

+ (void)setAnimationDuration:(NSTimeInterval)duration

パラメータ
duration
アニメーションを発生させる期間を秒単位で指定します。

解説
メソッドのbegin/commitセットを使用してアニメーションを指定する場合、アニメーションの期間を指定するためにこのメソッドを使用することができます。
アニメーションブロックの外部から呼び出した場合、このメソッドは何もしません。
beginAnimations:context:commitAnimationsメソッドの呼び出しの間で呼び出す必要があります。
そしてビューのアニメーション可能なプロパティを変更する前に、このメソッドを呼び出す必要があります。
デフォルト値は0.2秒です。

このメソッドの使用はiOS 4.0以降では推奨されません。
代わりにアニメーションとその期間の指定には、ブロックベースのアニメーションメソッドを使用する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setAnimationsEnabled:

アニメーションが有効かどうかを設定します。

+ (void)setAnimationsEnabled:(BOOL)enabled

パラメータ
enabled
YESの場合はアニメーションは有効に、NOの場合は無効になります。

解説
アニメーションはデフォルトで有効になっています。
アニメーションを無効にした場合、それ以降のアニメーションブロックのコードは実行されますが、アニメーションは実際に発生しません。
したがってアニメーションブロック内で行った変更は、アニメーション化する代わりに直ぐに反映されます。
これはブロックベースのアニメーションメソッドまたはbegin/commitアニメーションメソッドを使用するかどうかに関わりません。

このメソッドは呼び出された後に提出されたアニメーションのみに影響を与えます。
既にアニメーションが実行されている時にこのメソッドを呼び出した場合、それらが自然な終点に到達するまでアニメーションは継続して実行されます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setAnimationTransition:forView:cache:

アニメーションブロックの間にビューに適用する遷移を設定します。

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache

パラメータ
transition
viewに適用する遷移を指定します。
有効な値はUIViewAnimationTransitionで説明しています。

view
遷移を適用するビューを指定します。
cache
YESの場合、viewの前後の画像を一度描画し、アニメーションのフレームを生成するために使用します。
キャッシュすると性能を向上させることができますが、このパラメータをYESに設定する場合は、遷移中にビューまたはサブビューを更新することはできません。
ビューやサブビューを更新すると、キャッシュの動作に鑑賞し、アニメーション中のビューのコンテンツが不正確(または間違った場所)に描画される可能性があります。
遷移が終了するまでビューの更新は待つ必要があります。

NOの場合、ビューとその内容は遷移アニメーションの各フレーム毎に更新する必要がありますが、フレームレートに著しく影響を与える可能性があります。

解説
遷移中のビューの外観を変更したい(例えばあるビューから別のビューにフリップする)場合、以下のようにUIViewのインスタンスのコンテナビューを使用します。
  1. アニメーションブロックの開始
  2. コンテナビューの遷移を設定
  3. コンテナビューからサブビューを削除
  4. コンテナビューに新しいサブビューを追加
  5. アニメーションブロックをコミット
このメソッドの使用はiOS 4.0以降では推奨されません。
代わりに遷移の実行には、transitionWithView:duration:options:animations:completion:メソッドを使用する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


transitionFromView:toView:duration:options:completion:

与えられたパラメータを使用して、指定されたビュー間の遷移アニメーションを生成します。

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

パラメータ
fromView
遷移を開始するビューを指定します。
デフォルトでは、このビューは遷移の一部としてスーパービューから削除されます。
toView
遷移を終了するビューを指定します。
デフォルトでは、このビューは遷移の一部としてfromViewのスーパービューに追加されます。
duration
遷移アニメーションの期間を秒単位で指定します。
負の値または0を指定した場合は、アニメーションをしない変更になります。
options
アニメーションを実行する方法を示すオプションのマスクです。
有効な定数のリストはUIViewAnimationOptionsを参照してください。
completion
アニメーションシーケンスが終了した時に実行する、ブロックオブジェクトを指定します。
このブロックは戻り値を持たず、完了ハンドラが呼び出される前にアニメーションが実際に終了したかどうかを示す単一のブール引数を取ります。
アニメーションの期間が0の場合、このブロックは次の実行ループサイクルの開始時に実行されます。
このパラメータはNULLにすることができます。

解説
このメソッドは、frontViewパラメータのビューからtoViewパラメータのビューに遷移する簡単な方法を提供します。
デフォルトでは、frontViewのビューはtoViewのビューによってビュー階層内で置換されます。
両方のビューが既にビュー階層の一部である場合、単純に非表示または表示にするためのoptionsパラメータでUIViewAnimationOptionShowHideTransitionViewsオプションを含めることができます。
で表示または非表示にすることができます。

このメソッドは、これらビュー階層内のビューのみを変更します。
どのような方法でもアプリケーションのビューコントローラは変更されません。
例えば、ビューコントローラによって表示されたルートビューの変更にこのメソッドを使用する場合、変更を処理するためには適切にビューコントローラを更新する責任があります。

ビューの遷移は別のアニメーションが既に実行中でない限り直ちに開始されますが、その場合には現在のアニメーションが終了した直後に開始されます。

アニメーション中は、アニメーション化されているビューに対して一時的にユーザとの対話が無効になっています。
(iOS 5より前では、ユーザとの対話はアプリケーション全体で無効になっています。)
ユーザがビューと対話できるようにしたい場合は、optionsパラメータにUIViewAnimationOptionAllowUserInteraction定数を含めてください。

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h


transitionWithView:duration:options:animations:completion:

指定されたコンテナビューの遷移アニメーションを生成します。

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

パラメータ
view
遷移を実行するコンテナビューを指定します。
duration
遷移アニメーションの期間を秒単位で指定します。
負の値または0を指定した場合は、アニメーションをしない変更になります。
options
アニメーションを実行する方法を示す、オプションのマスクです。
有効な定数のリストはUIViewAnimationOptionsを参照してください。
animations
指定されたビューに希望する変更が含まれているブロックオブジェクトです。
このブロックはパラメータを取らず、戻り値はありません。
このパラメータはNULL以外にする必要があります。
completion
アニメーションシーケンスが終了した時に実行する、ブロックオブジェクトを指定します。
このブロックは戻り値を持たず、完了ハンドラが呼び出される前にアニメーションが実際に終了したかどうかを示す単一のブール引数を取ります。
アニメーションの期間が0の場合、このブロックは次の実行ループサイクルの開始時に実行されます。
このパラメータはNULLにすることができます。

解説
このメソッドは指定されたビューの状態に変化されるように遷移を適用します。
animationsパラメータで指定したブロックには、希望する状態変化が含まれます。
このブロックを使用して、指定したビューのサブビューを追加、削除、表示、または非表示にすることができます。
他のアニメーション可能な変更を組み込みたい場合は、optionパラメータにUIViewAnimationOptionAllowAnimatedContentキーを含める必要があります。

以下のコードは指定されたコンテナビューのフリップ遷移を生成します。
遷移の適切な時点で、あるサブビューが除去されて別のコンテナビューに追加されます。
これは新しいビューが新しいサブビューと場所に反転するように見えますが、実際には同じビューに新しい構成で元の場所に戻るだけです。

[UIView transitionWithView:containerView
        duration:0.2
        options:UIViewAnimationOptionTransitionFlipFromLeft
        animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]
}
        completion:NULL];

アニメーション中は、アニメーション化されているビューに対して一時的にユーザとの対話が無効になっています。
(iOS 5より前では、ユーザとの対話はアプリケーション全体で無効になっています。)
ユーザがビューと対話できるようにしたい場合は、optionsパラメータにUIViewAnimationOptionAllowUserInteraction定数を含めてください。

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h



●インスタンスメソッド

addGestureRecognizer:

ビューにGesture Recognizerを付加します。

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

パラメータ
gestureRecognizer
UIGestureRecognizerクラスから派生したクラスのオブジェクトを指定します。
このパラメータはnilでない必要があります。

解説
ビューにGesture Recognizerを付加し、ビューとその全てのサブビューにヒットテストされたタッチを受信させることによって、表現されたジェスチャの範囲を定義します。
ビューはGesture Reconizerを保持します。

利用可能
iOS 3.2以降で利用可能

宣言
UIView.h


addSubview:

レシーバのサブビューのリストの最後にビューを追加します。

- (void)addSubview:(UIView *)view

パラメータ
view
追加するビューを指定します。
このビューはレシーバによって保持されます。
追加された後、このビューは他のサブビューの上に表示されます。

解説
このメソッドはviewを保持し、そのスーパービューであるレシーバに次のレスポンダであることを設定します。

ビューは一つだけスーパービューを持つことができます。
viewが既にスーパービューを持っていてビューがレシーバでない場合、このメソッドはレシーバに新しいスーパービューを加える前に、以前のスーパービューを削除します。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


drawRect:

渡された矩形内にレシーバの画像を描画します。

- (void)drawRect:(CGRect)rect

パラメータ
rect
更新する必要があるビューの境界部分を指定します。
最初にビューを描画する際、この矩形は通常ビューの全可視境界です。
しかし以降の描画操作時には、矩形はビューの一部のみを指定することができます。

解説
このメソッドのデフォルト実装は何もしません。
ビューのコンテンツの描画に(Core GraphicsやUIKitなどの)ネイティブの描画テクノロジーを使用するサブクラスは、このメソッドをオーバーライドして描画コードを実装する必要があります。
ビューが他の方法でコンテンツを設定する場合は、このメソッドをオーバーライドする必要はありません。
例えば単にビューに背景色を表示する場合や、基礎となるレイヤオブジェクトを直接使用してビューにコンテンツを設定する場合は、このメソッドをオーバーライドする必要はありません。
同様にビューの描画にOpenGL ESを使用する場合は、このメソッドをオーバーライドしてはいけません。

このメソッドが呼び出された時点で、UIKitはビューに適切な描画環境を構成し、コンテンツをレンダリングするために必要な描画メソッドや関数を簡単に呼び出すことができます。
具体的には、UIKitは描画のためのグラフィックスコンテキストを生成・構成し、ビューの境界矩形の原点がその原点と一致するようにコンテキストの変換を調整します。
UIGraphicsGetCurrentContext関数を使用してグラフィックスコンテキストへの参照を取得することができますが、drawRect:メソッドへの呼び出しの間で変更される場合があるためグラフィックスコンテキストは保持しません。

rectパラメータで指定された矩形への描画は制限する必要があります。
更にビューのopaqueプロパティがYESに設定されている場合、drawRect:メソッドは不透明なコンテンツで指定された矩形を全て満たす必要があります。

UIViewからの直接のサブクラスの場合、このメソッドの実装でsuperを呼び出す必要はありません。
しかし異なるビュークラスをサブクラス化している場合は、実装の中のいくつかの点でsuperを呼び出す必要があります。

このメソッドはビューが最初に表示された時、またはビューの可視部分が無効になるイベントが発生した時に呼び出されます。
このメソッドは自身で直接呼び出しては行けません。
ビューの一部を無効にし、その部分を再描画する場合は、代わりにsetNeedsDisplayまたはsetNeedsDisplayInRect:メソッドを呼び出してください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


initWithFrame:

指定されたフレーム矩形で新たに割り当てられたビューオブジェクトを初期化して返します。

- (id)initWithFrame:(CGRect)aRect

パラメータ
aRect
ビューのフレーム矩形をポイント単位で指定します。
フレームの原点は、それを追加する予定のスーパービューに依存します。
このメソッドは、それに応じてcenterboundsプロパティを設定するためにフレーム矩形を使用します。

戻り値
初期化されたビューオブジェクト、あるいはオブジェクトが生成できなかった場合はnilになります。

解説
新しいビューオブジェクトは、使用する前にウィンドウのビュー階層に挿入する必要があります。
プログラムでビューオブジェクトを生成する場合、このメソッドはUIViewクラスの指定イニシャライザです。
サブクラスでカスタムの初期化を実行するためにこのメソッドをオーバーライドすることができますが、実装の開始時にsuperを呼び出す必要があります。

インターフェイスの設計にInterface Builderを使用する場合、ビューオブジェクトがその後nibファイルから読み込まれた時には、このメソッドは呼び出されません。
nibファイル内のオブジェクトは再構成した後、initWithCoder:メソッドを使用して初期化され、nibファイルに格納された属性と一致するようにビューの属性が修正されます。
ビューがnibファイルから読み込まれる方法についての詳細は『Resource Programming Guide』を参照してください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


insertSubview:atIndex:

指定したインデックスにサブビューを挿入します。

- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index

パラメータ
view
挿入するビューを指定します。
この値はnilにすることはできません。
index
ビューを挿入するsubviewsプロパティの配列内のインデックスを指定します。
サブビューのインデックスは0から始まり、サブビューの数を超えることはできません。

解説
このメソッドはビューを保持し、新しいスーパービューであるレシーバに次のレスポンダを設定します。

ビューは一つだけスーパービューを持つことができます。
viewが既にスーパービューを持っていてビューがレシーバでない場合、このメソッドはレシーバに新しいスーパービューを加える前に、以前のスーパービューを削除します。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


layoutSubviews

サブビューをレイアウトします。

- (void)layoutSubviews

解説
このメソッドのデフォルト実装は、iOS 5.1以前は何もしません。
そうでない場合、デフォルト実装では任意のサブビューのサイズと位置を決定するために設定した制約を使用します。

より正確にサブビューのレイアウトを実行するために、必要に応じてサブクラスでこのメソッドをオーバーライドすることができます。
サブビューの自動サイズ変更と制約ベースの動作が希望する動作を提供しない場合のみ、このメソッドをオーバーライドする必要があります。
サブビューのフレーム矩形を直接設定するために実装を使用することができます。

このメソッドを直接呼び出すことはできません。
レイアウトの更新を強制したい場合は、代わりに次の描画更新の前にsetNeedsLayoutメソッドを呼び出します。
ビューのレイアウトを直ぐに更新したい場合は、layoutIfNeededメソッドを呼び出してください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


removeFromSuperview

スーパービューとそのウィンドウからレシーバを解除し、レスポンダチェーンから削除します。

- (void)removeFromSuperview

解説
レシーバのスーパービューがnilでない場合、スーパービューはレシーバを解放します。
ビューを再利用する予定がある場合、このメソッドを呼び出す前にそれを保持し、必要に応じて後で再度解放してください。
ビューのdrawRect:メソッドの内側からこのメソッドを決して呼び出さないでください。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setNeedsDisplay

再描画が必要であるとして、レシーバの境界矩形全体を印します。

- (void)setNeedsDisplay

解説
ビューのコンテンツを再描画する必要があることをシステムに通知するために、このメソッドかsetNeedsDisplayInRect:を使用することができます。
このメソッドは要求の印を作ると、すぐにコードに制御を返します。
ビューは実際には次の再描画サイクルまで再描画されず、全てのビューが無効化された時点で更新されます。

:ビューの後ろがCAEAGLLayerオブジェクトになっている場合、このメソッドは効果がありません。
これはビューが(UIKitやCore Graphicsなど)ネイティブの描画テクノロジーのみを使用してコンテンツをレンダリングすること意図しているためです。

ビューのコンテンツや外観を変更した時のみ、ビューの再描画を要求するためにこのメソッドを使用する必要があります。
単にビューのジオメトリを変更する場合は、通常ビューを再描画しません。
代わりに既存のコンテンツはビューのcontentModeプロパティの値に基づいて調整されます。
変更する必要の無いコンテンツの再描画を避けることによって、既存のコンテンツの再表示のパフォーマンスを向上させることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


setNeedsDisplayInRect:

再描画が必要であるとして、レシーバの矩形全体を印します。

- (void)setNeedsDisplayInRect:(CGRect)invalidRect

パラメータ
invalidRect
無効として印すレシーバの矩形領域で、レシーバの座標系内で指定する必要があります。

解説
ビューのコンテンツを再描画する必要があることをシステムに通知するために、このメソッドかsetNeedsDisplayを使用することができます。
このメソッドは無効な矩形のビューの現在のリストに指定された矩形を追加し、すぐに返します。
ビューは実際には次の再描画サイクルまで再描画されず、全てのビューが無効化された時点で更新されます。

:ビューの後ろがCAEAGLLayerオブジェクトになっている場合、このメソッドは効果がありません。
これはビューが(UIKitやCore Graphicsなど)ネイティブの描画テクノロジーのみを使用してコンテンツをレンダリングすること意図しているためです。

ビューのコンテンツや外観を変更した時のみ、ビューの再描画を要求するためにこのメソッドを使用する必要があります。
単にビューのジオメトリを変更する場合は、通常ビューを再描画しません。
代わりに既存のコンテンツはビューのcontentModeプロパティの値に基づいて調整されます。
変更する必要の無いコンテンツの再描画を避けることによって、既存のコンテンツの再表示のパフォーマンスを向上させることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


viewWithTag:

指定した値と一致するビューを返します。

- (UIView *)viewWithTag:(NSInteger)tag

パラメータ
tag
検索するためのタグ値を指定します。

戻り値
tagパラメータの値に一致する、tagプロパティで印したレシーバの階層内のビューです。

解説
このメソッドは指定されたビューの現在のビューと全てのサブビューを検索します。

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h



●定数

UIViewAnimationOptions

ブロックを持つビューをアニメーション化するためのオプションを指定します。

enum    
    UIViewAnimationOptionLayoutSubviews=1<<0,
    UIViewAnimationOptionAllowUserInteraction=1<<1,
    UIViewAnimationOptionBeginFromCurrentState=1<<2,
    UIViewAnimationOptionRepeat=1<<3,
    UIViewAnimationOptionAutoreverse=1<<4,
    UIViewAnimationOptionOverrideInheritedDuration=1<<5,
    UIViewAnimationOptionOverrideInheritedCurve=1<<6,
    UIViewAnimationOptionAllowAnimatedContent=1<<7,
    UIViewAnimationOptionShowHideTransitionViews=1<<8,
     
    UIViewAnimationOptionCurveEaseInOut=0<<16,
    UIViewAnimationOptionCurveEaseIn=1<<16,
    UIViewAnimationOptionCurveEaseOut=2<<16,
    UIViewAnimationOptionCurveLinear=3<<16,
     
    UIViewAnimationOptionTransitionNone=0<<20,
    UIViewAnimationOptionTransitionFlipFromLeft=1<<20,
    UIViewAnimationOptionTransitionFlipFromRight=2<<20,
    UIViewAnimationOptionTransitionCurlUp=3<<20,
    UIViewAnimationOptionTransitionCurlDown=4<<20,
    UIViewAnimationOptionTransitionCrossDissolve=5<<20,
    UIViewAnimationOptionTransitionFlipFromTop=6<<20,
    UIViewAnimationOptionTransitionFlipFromBottom=7<<20,
};    
typedef NSUInteger UIViewAnimationOptions;    

定数

UIViewAnimationOptionLayoutSubviews
親ビューと一緒にアニメーションするように、コミット時にサブビューを配置します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionAllowUserInteraction
アニメーション中にビューがユーザと対話することができます。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionBeginFromCurrentState
既に動作しているアニメーションに関連付けられている現在の設定からアニメーションを開始します。
このキーが存在しない場合、動作中のアニメーションは新しいアニメーションが開始される前に終了させることができます。
他のアニメーションが動作していない場合、このキーは影響を与えません。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionRepeat
アニメーションを無限に繰り返します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionAutoreverse
アニメーションを往復します。
UIViewAnimationOptionRepeatオプションと組み合わせて使用する必要があります。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionOverrideInheritedDuration
アニメーションが提出された時に、指定された元の期間値を使用してアニメーションをするように強制します。
このキーが存在しない場合、アニメーションは動作中のアニメーションの残り期間を継承します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionOverrideInheritedCurve
アニメーションが提出された時に、指定された元のカーブ値を使用してアニメーションをするように強制します。
このキーが存在しない場合、アニメーションは動作中のアニメーションのカーブを継承します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionAllowAnimatedContent
動的にプロパティ値を変更して再描画することによってビューをアニメーションします。
このキーが存在しない場合、ビューはスナップショット画像を使用してアニメーションします。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionShowHideTransitionViews
存在する場合、ビューの遷移を実行する時に、このキーはビューを(削除や追加をする代わりに)非表示や表示にします。
このキーを使用する時は、両方のビューが親ビュー階層に既に存在する必要があります。
このキーが存在しない場合、親ビューのサブビューのリストに遷移のto-viewが追加され、from-viewが削除されます。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionCurveEaseInOut
ease-in ease-outカーブによって、アニメーションはゆっくり開始し、期間の中間では加速し、完了前には再び遅くなります。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionCurveEaseIn
ease-inカーブによって、アニメーションはゆっくり開始し、進行と共に加速します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionCurveEaseOut
ease-outカーブによって、アニメーションは速く開始し、進行と共に減速します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionCurveLinear
リニアアニメーションカーブによって、期間中は等速度でアニメーションします。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionNone
遷移の指定はありません。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionFlipFromLeft
垂直軸を中心にビューが左から右に反転する遷移です。
ビューの左側が手前に、右側が奥に向かって移動します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionFlipFromRight
垂直軸を中心にビューが右から左に反転する遷移です。
ビューの右側が手前に、左側が奥に向かって移動します。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionCurlUp
ビューの下部から上へ巻き上げる遷移を行います。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionCurlDown
ビューの上部から下へ巻き下げる遷移を行います。
iOS 4.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionCrossDissolve
あるビューから次のビューへディゾルブする遷移です。
iOS 5.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionFlipFromTop
水平軸を中心に上から下に反転する遷移です。
ビューの上側が手前に、下側が奥に向かって移動します。
iOS 5.0以降で利用可能
UIView.hで宣言

UIViewAnimationOptionTransitionFlipFromBottom
水平軸を中心に下から上に反転する遷移です。
ビューの下側が手前に、上側が奥に向かって移動します。
iOS 5.0以降で利用可能
UIView.hで宣言

利用可能
iOS 4.0以降で利用可能

宣言
UIView.h


UIViewAnimationCurve

サポートされているアニメーションカーブを指定します。

typedef enum {
    UIViewAnimationCurveEaseInOut,
    UIViewAnimationCurveEaseIn,
    UIViewAnimationCurveEaseOut,
    UIViewAnimationCurveLinear
} UIViewAnimationCurve;

定数

UIViewAnimationCurveEaseInOut
ease-in ease-outカーブは、アニメーションをゆっくり開始し、期間の中間では加速、終了前にはまた減速するカーブです。
これはほとんどのアニメーションでデフォルトのカーブです。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationCurveEaseIn
ease-inカーブは、アニメーションをゆっくり開始し、進行に応じて加速します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationCurveEaseOut
ease-outカーブは、アニメーションの開始時には速く、完了に向けて減速します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationCurveLinear
線形アニメーションカーブは、アニメーションの期間中、一定の速度で進行します。
iOS 2.0以降で利用可能
UIView.hで宣言

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


UIViewContentMode

ビューのサイズが変更された時に、コンテンツを調整する方法を指定します。

typedef enum {
    UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,
    UIViewContentModeScaleAspectFill,
    UIViewContentModeRedraw,
    UIViewContentModeCenter,
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
} UIViewContentMode;

定数

UIViewContentModeScaleToFill
必要に応じてコンテンツの縦横比を変更することによって、ビューのサイズに合わせてコンテンツを拡大縮小します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeScaleAspectFit
縦横比を維持することによって、ビューのサイズに合わせてコンテンツを拡大縮小します。
ビューの境界の残りの領域は透明になります。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeScaleAspectFill
ビューのサイズを満たすようにコンテンツを拡大縮小します。
ビューの境界を満たすために、コンテンツの一部は切り取られる可能性があります。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeRedraw
setNeedsDisplayメソッドを呼び出すことによって、境界が変更された時にビューを再表示します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeCenter
同じ比率を維持し、ビューの境界内でコンテンツを中央に配置します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeTop
ビューの境界内で上端に揃えてコンテンツを中央に配置します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeBottom
ビューの境界内で下端に揃えてコンテンツを中央に配置します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeLeft
ビューの左端にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeRight
ビュー濃淡にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeTopLeft
ビューの左上角にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeTopRight
ビューの右上角にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeBottomLeft
ビューの左下角にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewContentModeBottomRight
ビューの右下角にコンテンツを揃えます。
iOS 2.0以降で利用可能
UIView.hで宣言

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h


UIViewAnimationTransition

アニメーションブロック内のビューに適用する遷移を指定します。

typedef enum {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;

定数

UIViewAnimationTransitionNone
遷移を指定しません。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationTransitionFlipFromLeft
垂直軸を中心にビューが左から右に反転する遷移です。
ビューの左側が手前に、右側が奥に向かって移動します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationTransitionFlipFromRight
垂直軸を中心にビューが右から左に反転する遷移です。
ビューの右側が手前に、左側が奥に向かって移動します。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationTransitionCurlUp
ビューの下部から上へ巻き上げる遷移を行います。
iOS 2.0以降で利用可能
UIView.hで宣言

UIViewAnimationTransitionCurlDown
ビューの上部から下へ巻き下げる遷移を行います。
iOS 2.0以降で利用可能
UIView.hで宣言

利用可能
iOS 2.0以降で利用可能

宣言
UIView.h



参考文献

UIView Class Reference

UIWindowクラス

2013. 05. 14
・継承
UIView : UIResponder : NSObject

・準拠
NSCoding (UIView)
UIAppearance (UIView)
UIAppearanceContainer (UIView)
NSObject (NSObject)

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
iOSマルチディスプレイプログラミングガイド

・宣言
UIWindow.h



●概要

UIWindowクラスはウィンドウと呼ばれるオブジェクトを定義し、デバイスの画面上にアプリケーションが表示するビューを調整します。
アプリケーションは外部デバイスの画面上にコンテンツを表示できない限り、唯一のウィンドウを持ちます。

ウィンドウの2つ主要な機能は、ビューを表示するための領域の提供と、ビューへのイベントの配布です。
アプリケーションが表示するコンテンツを変更する場合、ウィンドウのルートビューを変更することができますが、新しいウィンドウを生成しないでください。
ウィンドウは、他のウィンドウに相対的なz軸上に位置する場所を表すレベル(通常はUIWindowLevelNormal)に属しています。
例えば、システムのアラートウィンドウは通常アプリケーションのウィンドウより上に表示されます。

:アプリケーションの生成にXcodeのアプリケーションテンプレートとストーリーボードを使用すると、ウィンドウが生成されます。
Interface Builderでのウィンドウの生成を選択した場合、ウィンドウが現在のデバイスに適切なサイズになるように、AttributesインスペクタのFull Screen at Launchオプションを選択してください。
ウィンドウは境界の外側でのタッチイベントは受信せず、デフォルトではビューはウィンドウの境界にクリップされていないため、不適切なサイズのウィンドウを提供すると全てのビューにタッチイベントを提供できない可能性があります。

ウィンドウの使用方法についての詳細は『iOSマルチディスプレイプログラミングガイド』を参照してください。



●タスク

●ウィンドウの設定

  windowLevel    プロパティ
  screen    プロパティ
  rootViewController    プロパティ

●ウィンドウのキーの作成

  keyWindow    プロパティ
– makeKeyAndVisible
– becomeKeyWindow
– makeKeyWindow
– resignKeyWindow

●座標変換

– convertPoint:toWindow:
– convertPoint:fromWindow:
– convertRect:toWindow:
– convertRect:fromWindow:

●イベントの送信

– sendEvent:



●プロパティ

rootViewController

ウィンドウのルートビューコントローラです。

@property(nonatomic,retain) UIViewController *rootViewController

解説
ルートビューコントローラはウィンドウのコンテントビューを提供します。
このプロパティにビューコントローラを割り当てると、(プログラムまたはInterface Builderを使って)ウィンドウのコンテンツビューとしてビューコントローラのビューをインストールします。
ウィンドウが既にビュー階層を持っている場合は、新しいビューがインストールされる前に古いビューを削除します。

このプロパティのデフォルト値はnilです。

利用可能
iOS 4.0以降で利用可能

宣言
UIWindow.h



●インスタンスメソッド

makeKeyAndVisible


レシーバをキーウィンドウにし、ウィンドウが表示されるようにします。

- (void)makeKeyAndVisible

解説
これはレシーバをメインウィンドウにする簡易メソッドであり、他のウィンドウの前面に表示します。
またUIViewの継承されたhiddenプロパティを使用して、ウィンドウの表示/非表示を行うことができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIWindow.h



●定数



●通知



参考文献

UIWindow Class Reference

UIScreenクラス

2013. 05. 13
・継承
NSObject

・準拠
NSObject (NSObject)

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・宣言
UIScreen.h



●概要

UIScreenオブジェクトは、デバイスの画面全体に外接する矩形を含んでいます。
アプリケーションのユーザインターフェイスを設定する時は、アプリケーションのウィンドウに最適なフレーム矩形を取得するために、このオブジェクトのプロパティを使用する必要があります。



●タスク

●利用可能な画面の取得


+ mainScreen
+ screens
  mirroredScreen    プロパティ

●境界情報の取得


  bounds    プロパティ
  applicationFrame    プロパティ
  scale    プロパティ

●画面モードへのアクセス


  preferredMode    プロパティ
  availableModes    プロパティ
  currentMode    プロパティ

●ディスプレイリンクの取得


– displayLinkWithTarget:selector:

●ディスプレイの輝度の設定


  brightness    プロパティ
  wantsSoftwareDimming    プロパティ

●ディスプレイのオーバースキャン補正の設定


  overscanCompensation    プロパティ



●プロパティ

bounds

ポイント単位で画面に外接する矩形が含まれています。(読み込みのみ)

@property(nonatomic, readonly) CGRect bounds

利用可能
iOS 2.0以降で利用可能

宣言
UIScreen.h



●クラスメソッド

mainScreen

デバイスの画面を表す画面オブジェクトを返します。

+ (UIScreen *)mainScreen

戻り値
デバイスの画面オブジェクト。

利用可能
iOS 2.0以降で利用可能

宣言
UIScreen.h



●インスタンスメソッド



●定数



●通知



参考文献

UIScreen Class Reference

UIApplicationクラス

2013. 05. 12
・継承
UIResponder : NSObject

・準拠
UIActionSheetDelegate
NSObject (NSObject)

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・宣言
UIApplication.h



●概要

UIApplicationクラスは、iOS上で実行するアプリケーションの制御と調整の一元的な管理を提供します。

全てのアプリケーションはUIApplication(またはUIApplicationのサブクラス)のインスタンスを必ず一つ持つ必要があります。
アプリケーションが起動するとUIApplicationMain関数を呼び出し、他のタスクとは独立したシングルトンのUIApplicationオブジェクトを生成します。
その後sharedApplicationクラスメソッドで呼び出すことによって、オブジェクトにアクセスすることができます。

UIApplicationオブジェクトの主要な役割は、入力されたユーザイベントの初期手順の処理を行うことです。
またコントロールオブジェクト(UIControl)によって、適切なターゲットオブジェクトにアクションメッセージを送ります。
さらにUIApplicationオブジェクトは、アプリケーションが現在開いている全てのウィンドウ(UIWindowオブジェクト)のリストを保持し、それらを介してアプリケーションのUIViewオブジェクトのいずれかを取得することができます。
アプリケーションオブジェクトには通常、アプリケーションの重要なランタイムイベント(例えば、アプリケーションの起動、メモリ不足の警告、アプリケーションの終了など)を通知し、適切に対応する機会を与えるデリゲートオブジェクトが割り当てられています。

アプリケーションは、openURL:メソッドを介して電子メールや画像ファイルといったリソースを協調処理することができます。
例えばアプリケーションがこのメソッドを使って、電子メールのURLからメールクライアントの起動とメッセージの表示を行うこともできます。

またUIApplicationとUIApplicationDelegateのプログラムインターフェイスは、デバイス固有の動作を管理することもできます。
インターフェイスの向きの変化に応じて一時的にタッチイベントの入力を一時停止したり、(ユーザの顔の)近接を感知してオン/オフを切り替えたり、アプリケーションの応答を制御することができます。

iOS 3.0では、UIApplicationにリモート通知の登録や、アンドゥ/リドゥのUIをトリガするための(applicationSupportsShakeToEdit)、インストールされたアプリケーションがURLを開けるかどうかを決定するための(canOpenURL:)メソッドが追加されています。

iOS 4.0では、UIApplicationにバックグラウンドでの実行の管理や、ローカル通知のスケジューリングとキャンセル、リモートコントロールイベントの受信を制御するためのメソッドや定数が追加されています。

UIApplicationはUIApplicationDelegateプロトコルを採用したデリゲートを定義し、いくつかのプロトコルメソッドを実装する必要があります。

サブクラス化の注意

カスタムイベントやアクションディスパッチを実装するため、sendEvent:またはsendAction:to:from:forEvent:をオーバーライドするために、UIApplicationのサブクラスで解決する場合があります。
しかしこのクラスを拡張するための有効な必要性は稀で、ほとんどの場合はアプリケーションデリゲート(UIApplicationDelegate)で十分です。
UIApplicationをサブクラス化する場合は、サブクラスで達成しようとしていることを熟考してみてください。



●タスク

●アプリケーションインスタンスの取得

+ sharedApplication

●デリゲートの設定と取得

  delegate    プロパティ

●アプリケーションウィンドウの取得

  keyWindow    プロパティ
  windows    プロパティ

●デフォルトのインターフェイスの向きの管理

– supportedInterfaceOrientationsForWindow:

●イベントの制御と処理

– sendEvent:
– sendAction:to:from:forEvent:
– beginIgnoringInteractionEvents
– endIgnoringInteractionEvents
– isIgnoringInteractionEvents
  applicationSupportsShakeToEdit    プロパティ
  proximitySensingEnabled    プロパティ    iOS 3.0では非推奨

●URLリソースを開く

– openURL:
– canOpenURL:

●リモート通知の登録

– registerForRemoteNotificationTypes:
– unregisterForRemoteNotifications
– enabledRemoteNotificationTypes

●アプリケーションアクティビティの管理

  idleTimerDisabled    プロパティ

●バックグラウンドでの実行の管理

  applicationState    プロパティ
  backgroundTimeRemaining    プロパティ
– beginBackgroundTaskWithExpirationHandler:
– endBackgroundTask:
– setKeepAliveTimeout:handler:
– clearKeepAliveTimeout

●非同期の状態復元の実行

– extendStateRestoration
– completeStateRestoration

●ローカル通知の登録

– scheduleLocalNotification:
– presentLocalNotificationNow:
– cancelLocalNotification:
– cancelAllLocalNotifications
  scheduledLocalNotifications    プロパティ

●保護されたコンテンツの利用

  protectedDataAvailable    プロパティ

●リモートコントロールイベントの登録

– beginReceivingRemoteControlEvents
– endReceivingRemoteControlEvents

●ステータスバーの向きの管理

– setStatusBarOrientation:animated:
  statusBarOrientation    プロパティ
  statusBarOrientationAnimationDuration    プロパティ

●アプリケーションの外観の制御

– setStatusBarHidden:withAnimation:
  statusBarHidden    プロパティ
– setStatusBarStyle:animated:
  statusBarStyle    プロパティ
  statusBarFrame    プロパティ
  networkActivityIndicatorVisible    プロパティ
  applicationIconBadgeNumber    プロパティ
  userInterfaceLayoutDirection    プロパティ
– setStatusBarHidden:animated:    iOS 3.2では非推奨

●Newsstandアプリケーションのアイコンの設定

- setNewsstandIconImage:



●プロパティ

delegate

アプリケーションオブジェクトのデリゲートです。

@property(nonatomic, assign) id<UIApplicationDelegate> delegate

解説
デリゲートはUIApplicationDelegate正式プロトコルを採用する必要があります。
UIApplicationはデリゲートを割り当てますが保持はしません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


idleTimerDisabled

アプリケーションのアイドルタイマーを無効にするかどうかを制御するブール値です。

@property(nonatomic, getter=isIdleTimerDisabled) BOOL idleTimerDisabled

解説
このプロパティのデフォルト値はNOです。
アプリケーションでタッチ操作による短期間ユーザの入力が無い場合、デバイスの画面が薄暗くなりシステムはスリープ状態になります。
これは電力を節約する目的のために行われます。
しかし(ゲームなどの)加速度センサ以外のユーザ入力を持たないアプリケーションの場合、このプロパティをYESにすることでアイドルタイマーを無効にして、システムのスリープを防ぐことができます。

重要:このプロパティは必要な場合にのみ設定し、必要が無くなったらNOにしてリセットする必要があります。
ほとんどのアプリケーションは、アイドルタイマーが経過した時にシステムがスクリーンをオフにできるようにする必要があります。
これにはオーディオアプリケーションも含まれます。
適切なオーディオセッションサービスを使用し、スクリーンがオフになっても継続して再生や録音ができるようにしてください。
地図アプリケーションやゲームなどの、散発的にユーザと対話するアプリケーションでは、アイドルタイマーを無効にする必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


statusBarHidden

ステータスバーが非表示かどうかを決定するブール値です。

@property(nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden

戻り値
YESはステータスバーが非表示であることを意味し、NOは表示を意味します。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h



●クラスメソッド

sharedApplication

シングルトンのアプリケーションインスタンスを返します。

+ (UIApplication *)sharedApplication

戻り値
アプリケーションインスタンスはUIApplicationMain関数で生成されます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h



●インスタンスメソッド

openURL:

指定したURLのリソースを開きます。

- (BOOL)openURL:(NSURL *)url

パラメータ
url
URL(Universal Resource Locator)を表すオブジェクトを指定します。
UIKitはhttp:、https:、tel:、mailto:スキームをサポートします。

戻り値
URLの場所にあるリソースが正常に開けた場合はYES、それ以外の場合はNOを返します。

解説
URLは同じまたは別のアプリケーションのリソースの場所を指定できます。
リソースが別のアプリケーションの場合、このメソッドを呼び出すと呼び出し元のアプリケーションが終了し、他のアプリケーションが起動する場合があります。

このメソッドの前にcanOpenURL:を呼び出し、アプリケーションが処理可能かどうかを照合することができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


setStatusBarHidden:animated:

ステータスバーを非表示または表示にし、オプションで遷移をアニメーションできます。
(このメソッドはiOS 3.2では非推奨です。代わりにsetStatusBarHidden:withAnimation:を使用してください。)

- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated

パラメータ
hidden
ステータスバーを非表示にする場合はYES、表示する場合はNOにします。
デフォルト値はNOです。
animated
非表示状態から、または非表示状態への遷移をアニメーションする場合はYES、それ以外の場合はNOにします。

解説
hiddenの値に応じて、インターフェイスの上部にステータスバーの表示/非表示をフェードするアニメーションを行うことができます。

利用可能
iOS 2.0以降で利用可能
iOS 3.2で非推奨

宣言
UIApplication.h


setStatusBarHidden:withAnimation:

ステータスバーを非表示または表示し、オプションで遷移をアニメーションします。

- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation

パラメータ
hidden
ステータスバーを非表示にするにはYES、表示するにはNOにします。
animated
アニメーションする必要があるかどうか、要求した場合にステータスバーをフェードイン/アウトまたはスライドイン/アウトするかを示す定数です。

解説
詳細はUIStatusBarAnimation型の定数の説明を参照してください。

利用可能
iOS 3.2以降で利用可能

宣言
UIApplication.h



●定数

UIInterfaceOrientation

アプリケーションのユーザインターフェイスの向きです。

typedef enum {
    UIInterfaceOrientationPortrait=UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown=UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft=UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight=UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;

定数

UIInterfaceOrientationPortrait
デバイスがポートレートモードで、デバイスを垂直に持った時にホームボタンが下部にある状態です。
iOS 2.0以降で利用可能
UIApplication.hで宣言

UIInterfaceOrientationPortraitUpsideDown
デバイスがポートレートモードですが上下逆で、デバイスを垂直に持った時にホームボタンが上部にある状態です。
iOS 2.0以降で利用可能
UIApplication.hで宣言

UIInterfaceOrientationLandscapeLeft
デバイスがランドスケープモードで、デバイスを垂直に持った時にホームボタンが左側にある状態です。
iOS 2.0以降で利用可能
UIApplication.hで宣言

UIInterfaceOrientationLandscapeRight
デバイスがランドスケープモードで、デバイスを垂直に持った時にホームボタンが右側にある状態です。
iOS 2.0以降で利用可能
UIApplication.hで宣言

解説
statusBarOrientationプロパティやsetStatusBarOrientation:animated:メソッドでこれらの定数を使用します。

デバイスの回転に対してコンテンツは反対の方向に回転する必要があるため、UIDeviceOrientationLandscapeRightは UIInterfaceOrientationLandscapeLeftに、UIDeviceOrientationLandscapeLeftは UIInterfaceOrientationLandscapeRightに割り当てられていることに注意してください。

宣言
UIApplication.h


UIStatusBarAnimation

ステータスバーの表示/非表示時のアニメーションに適用されます。

 typedef enum {
    UIStatusBarAnimationNone,
    UIStatusBarAnimationFade,
    UIStatusBarAnimationSlide,
} UIStatusBarAnimation;

定数

UIStatusBarAnimationNone
ステータスバーの表示/非表示にアニメーションを適用しません。
iOS 3.2以降で利用可能
UIApplication.hで宣言

UIStatusBarAnimationFade
ステータスバーの表示/非表示で、フェードイン/フェードアウトを行います。
iOS 3.2以降で利用可能
UIApplication.hで宣言

UIStatusBarAnimationSlide
ステータスバーの表示/非表示で、スライドイン/スライドアウトを行います。
iOS 3.2以降で利用可能
UIApplication.hで宣言

解説
UIStatusBarAnimation型の定数はsetStatusBarHidden:withAnimation:メソッドの引数です。

利用可能
iOS 3.2以降で利用可能

宣言
UIApplication.h



●通知

全てのUIApplication通知はsharedApplicationによって返されるアプリケーションインスタンスによって投じられます。


UIApplicationDidBecomeActiveNotification

アプリケーションがアクティブになった時にポストされます。

イベントを受信している時、アプリケーションはアクティブです。
アクティブなアプリケーションはフォーカスを持っていると言うことができます。
起動した後にフォーカスを取得し、オーバーレイのウィンドウがポップアップしたりデバイスがロックされた時にフォーカスを失い、デバイスがアンロックされるとフォーカスを取得します。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationDidChangeStatusBarFrameNotification

ステータスバーのフレームが変更した時にポストされます。

新しいステータスバーのフレームの位置とサイズはCGRect構造体で表され、カプセル化してNSValueオブジェクトとしてuserInfo辞書に格納されます。
この値はUIApplicationStatusBarFrameUserInfoKeyでアクセスすることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationDidChangeStatusBarOrientationNotification

アプリケーションのユーザインターフェイスの向きが変わった時にポストされます。

UIInterfaceOrientationの値は、カプセル化してNSNumberオブジェクトとしてuserInfo辞書に格納されます。
この値はUIApplicationStatusBarOrientationUserInforKeyでアクセスすることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationDidFinishLaunchingNotification

アプリケーションの起動が終了した直後にポストされます。

アプリケーションの起動が、リモート通知による結果であったり、他のアプリケーションがURLリソースを開いてポスティングアプリケーションを要求したことによるものであった場合は、userInfo辞書に通知オブジェクトを格納します。
UIApplicationLaunchOptionsURLKeyUIApplicationLaunchOptionsSourceApplicationKey(URL用)、UIApplicationLaunchOptionsRemoteNotificationKey(リモート通知用)
UIApplicationLaunchOptionsLocalNotificationKey(ローカル通知用)定数を使用して、辞書の内容にアクセスすることができます。
通常のアプリケーションの起動でポストされた通知には、userInfo辞書がありません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationDidReceiveMemoryWarningNotification

アプリケーションがメモリ不足についてOSから警告を受信した時にポストされます。

この通知はuserInfo辞書を含みません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationSignificantTimeChangeNotification

(深夜に)日付が変わったり、キャリアが時刻を更新したり、夏時間になる(または夏時間から戻る)など、時刻に大幅な変更があった時にポストされます。

この通知はuserInfo辞書を含みません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationWillChangeStatusBarOrientationNotification

アプリケーションのユーザインターフェイスの向きが変わる時にポストされます。

UIInterfaceOrientationの値は、カプセル化してNSNumberオブジェクトとしてuserInfo辞書に格納されます。
この値はUIApplicationStatusBarOrientationUserInforKeyでアクセスすることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationWillChangeStatusBarFrameNotification

ステータスバーのフレームが変更する時にポストされます。

新しいステータスバーのフレームの位置とサイズはCGRect構造体で表され、カプセル化してNSValueオブジェクトとしてuserInfo辞書に格納されます。
この値はUIApplicationStatusBarFrameUserInfoKeyでアクセスすることができます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationWillResignActiveNotification

アプリケーションがアクティブでなくなり、フォーカスを失う時にポストされます。

イベントを受信している時、アプリケーションはアクティブです。
アクティブなアプリケーションはフォーカスを持っていると言うことができます。
起動した後にフォーカスを取得し、オーバーレイのウィンドウがポップアップしたりデバイスがロックされた時にフォーカスを失い、デバイスがアンロックされるとフォーカスを取得します。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


UIApplicationWillTerminateNotification

アプリケーションが終了する時にポストされます。

この通知はデリゲートのapplicationWillTerminate:メソッドに関連付けられています。
この通知はuserInfo辞書を含みません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h



参考文献

UIApplication Class Reference

UIApplicationDelegateプロトコル

2013. 05. 11
・準拠
NSObject

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
iOSアプリケーションプログラミングガイド
LocalおよびPush Notificationプログラミングガイド

・宣言
UIApplication.h
UIStateRestoration.h



●概要

UIApplicationDelegateプロトコルは、シングルトンのUIApplicationオブジェクトのデリゲートによって実装されるメソッドを宣言します。
これらのメソッドは、起動完了時や終了時、メモリの低下、重要な変更の発生など、アプリケーション実行中におけるキーイベントについての情報を提供します。
これらのメソッドを実装すると、システムイベントへ応答し、適切に対応する機会を与えられます。

アプリケーションデリゲートの主な仕事の一つは、実行している間のアプリケーションの状態遷移を追跡することです。
iOS 4.0より前では、アプリケーションはアクティブか非アクティブ、あるいは実行していないのいずれかでした。
iOS 4.0以降では、バックグラウンドでの実行や一時停止にすることもできます。
これらの遷移の全てで、アプリケーションからの応答が正常に実行されていることを保証する必要があります。
例えば、バックグラウンドのアプリケーションはユーザインターフェイスの更新を停止する必要があります。
アプリケーションデリゲートのメソッドを使用して、これらの遷移への応答を提供します。

起動時間はアプリケーションのライフサイクルにおいて特に重要なポイントです。
ユーザがアイコンをタップすることによってアプリケーションを起動することに加えて、特定のイベントタイプに対応するためにアプリケーションを起動することができます。
例えば、入ってくるプッシュ通知に応答して起動することができ、ファイルを開くか尋ねたり、要求されたいくつかのバックグラウンドイベントを処理するために起動することができます。
これらの場合の全てにおいて、オプションの辞書はapplication:didFinishLaunchingWithOptions:メソッドに渡された、起動理由に関する情報を提供します。

アプリケーションが既に実行されている状況では、アプリケーションデリゲートのメソッドはキーの変更に応答して呼び出されます。
このプロトコルのメソッドはオプションですが、ほとんどまたは全て実装されるべきです。

iOS 6以降では、アプリケーションデリゲートはアプリケーションの状態の保存と復元において重要な役割を果たしています。
デリゲートは状態の保存や復元を行うべきかどうかをUIKitに指示します。
またいくつかの場合では、復元中にビューコントローラオブジェクトを提供するため、アプリケーションの最後の機会として働き、ビューコントローラオブジェクトを提供することがあります。

アプリケーションの起動サイクルや、アプリケーションデリゲートのメソッドを使用した状態遷移の詳細については『iOSアプリケーションプログラミングガイド』を参照してください。
UIApplicationシングルトンクラスについての詳細は、『UIApplicationクラス』を参照してください。



●タスク

アプリケーションの状態変更の監視

– application:willFinishLaunchingWithOptions:
– application:didFinishLaunchingWithOptions:
– applicationDidBecomeActive:
– applicationWillResignActive:
– applicationDidEnterBackground:
– applicationWillEnterForeground:
– applicationWillTerminate:
– applicationDidFinishLaunching:

●アプリケーションの状態復元の管理

– application:shouldSaveApplicationState:
– application:shouldRestoreApplicationState:
– application:viewControllerWithRestorationIdentifierPath:coder:
– application:willEncodeRestorableStateWithCoder:
– application:didDecodeRestorableStateWithCoder:

●ストーリーボード用ウィンドウの提供

window    プロパティ

●デフォルトのインターフェイス方向の管理

– application:supportedInterfaceOrientationsForWindow:

●URLリソースを開く

– application:openURL:sourceApplication:annotation:
– application:handleOpenURL:

●ステータスバー変更の管理

– application:willChangeStatusBarOrientation:duration:
– application:didChangeStatusBarOrientation:
– application:willChangeStatusBarFrame:
– application:didChangeStatusBarFrame:

●システム通知への応答

– applicationDidReceiveMemoryWarning:
– applicationSignificantTimeChange:

●リモート通知の処理

– application:didReceiveRemoteNotification:
– application:didRegisterForRemoteNotificationsWithDeviceToken:
– application:didFailToRegisterForRemoteNotificationsWithError:

●ローカル通知の処理

– application:didReceiveLocalNotification:

●コンテンツ保護の変更への応答

– applicationProtectedDataWillBecomeUnavailable:
– applicationProtectedDataDidBecomeAvailable:



●プロパティ



●インスタンスメソッド

・application:didChangeStatusBarFrame:

ステータスバーのフレームが変更された時にデリゲートに伝えます。

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。
oldStatusBarFrame
画面座標中のステータスバーの以前のフレームを指定します。

解説
このメソッドを呼び出した後、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationDidChangeStatusBarFrameNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・application:didChangeStatusBarOrientation:

ステータスバーのインターフェイスの向きが変更されたことをデリゲートに伝えます。

- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。
oldStatusBarOrientation
この定数は、アプリケーションのユーザインターフェイスの以前の向きを示します。
詳細は『Monitoring Application State Changes』を参照してください。

解説
デリゲートは共有しているUIDeviceオブジェクトから、現在のデバイスの向きを取得することができます。

このメソッドを呼び出した後、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationDidChangeStatusBarOrientationNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・application:didFailToRegisterForRemoteNotificationsWithError:

Apple Push Serviceが登録プロセスを完了できなかった時にデリゲートに送信します。

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

パラメータ
application
リモート通知登録プロセスを開始するアプリケーションを指定します。
error
登録に成功しなかった理由の情報をカプセル化したNSErrorオブジェクトを指定します。
アプリケーションはユーザにこの情報を表示するかを選択することができます。

解説
UIApplicationのregisterForRemoteNotificationTypes:メソッドが呼び出された後、登録プロセスにエラーがあると、デリゲートはこのメッセージを受信します。
アプリケーションでプッシュ通知をどのように実装するかについての詳細は『LocalおよびPush Notificationプログラミングガイド』を参照してください。

利用可能
iOS 3.0以降で利用可能

宣言
UIApplication.h


・application:didFinishLaunchingWithOptions:

起動プロセスがほとんど完了し、アプリの実行準備がほとんどできていることをデリゲートに通知します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。
launchOptions
(もしあれば)アプリケーションが起動された理由を示す辞書を指定します。
この辞書の内容は、ユーザが直接アプリケーションを起動した状況では空である可能性があります。
この辞書での有効なキーや、それらの処理についての詳細は『Launch Options Keys』を参照してください。

戻り値
アプリケーションがURLリソースを処理できない場合はNO、それ以外の場合はYESを返します。
アプリケーションがリモート通知の結果によって起動された場合、戻り値は無視されます。

解説
アプリケーションの初期化と最終的な微調整を完了するために、このメソッド(と対応するapplication:willFinishLaunchingWithOptions:メソッド)を使用する必要があります。
このメソッドは状態の復元が行われた後に呼び出されますが、アプリケーションのウィンドウと他のUIが表示される前になります。
このメソッドが返された後のある時点で、アクティブ(フォアグラウンド)状態かバックグラウンド状態にアプリケーションを移動するために、システムはアプリケーションデリゲートの他のメソッドを呼び出します。

このメソッドはlaunchOptions辞書の任意のキーを処理する最後の機会を提示します。
application:willFinishLaunchingWithOptions:メソッドでキーを評価しなかった場合、このメソッドで検査して適切な応答を提供する必要があります。

アプリケーションデリゲートではないオブジェクトは、UIApplicationDidFinishLaunchingNotificationという名前の通知を観察し、通知のuserInfo辞書にアクセスすることによって、同じlaunchOptions辞書の値にアクセスすることができます。
その通知は、このメソッドが返った少し後に送信されます。

重要:アプリケーションの初期化には、このメソッドとapplication:willFinishLaunchingWithOptions:メソッドの使用を大いに推奨しており、applicationDidFinishLaunching:メソッドは古いバージョンのiOSで実行するアプリケーションのみを意図しているので使用しないでください。

このメソッドから返される結果はapplication:willFinishLaunchingWithOptions:メソッドから返される結果と組み合わせて、URLを処理しなければならないかどうかを判断します。
いずれかのメソッドでNOが返された場合、URLは処理されません。
メソッドのどちらかを実装していない場合は、実装されたメソッドの戻り値だけで判断されます。

利用可能
iOS 3.0以降で利用可能

宣言
UIApplication.h


・application:didReceiveRemoteNotification:

実行中のアプリケーションがリモート通知を受信したことをデリゲートに伝えます。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

パラメータ
application
リモート通知を受信するアプリケーションを指定します。
userInfo
アプリケーションアイコンに付けるバッジの数字や、警告音、ユーザに表示する警告メッセージ、通知の識別子、カスタムデータなどが潜在的に含まれている、リモート通知に関連した情報を含む辞書を指定します。
プロバイダはiOSがNSDictionaryオブジェクトに変換するJSONで定義された辞書として発信しますが、辞書にはNSNullと共にプロパティリストオブジェクトのみが含まれている場合があります。

解説
アプリケーションが実行されてリモート通知を受信すると、アプリケーションは通知を処理するためにこのメソッドを呼び出します。
このメソッドの実装は、適切な手続きをとるために通知を使用する必要があります。
例えば、待機しているアプリケーションにサーバに接続して待っているデータをダウンロードするための信号として使用することができます。

userInfo辞書には、別の辞書の値であるapsキーが含まれています。
aps辞書の情報を必要とはしないはずですが、以下のキーを使用してその内容を取得することができます。
  • alert:値は警告メッセージの文字列、またはbodyとshow-viewの2つのキーを持つ辞書です。
    bodyキーの値は警告メッセージを含む文字列で、show-viewキーの値はブール値です。
    show-viewキーの値がfalseの場合、アラートのViewボタンは表示されません。
    デフォルトではViewボタンが表示され、ユーザがタップするとアプリケーションが起動します。

  • badge:プロバイダからダウンロードするデータアイテムの量を示す数値です。
    この数値はアプリケーションアイコンの上に表示されます。
    badgeプロパティの欠如は、現在アイコンに付ける数値を削除する必要があることを示しています。

  • sound:警告音として再生するアプリケーションバンドル内のサウンドファイル名です。
    "default"が指定されている場合。デフォルトのサウンドが再生される必要があります。
またuserInfo辞書は、JSONスキーマと一致するプロバイダによって定義されたカスタムデータを持っている場合があります。
カスタムデータのプロパティは、aps辞書と同じレベルで指定する必要があります。
ただしカスタム定義されたプロパティは、通知あたりの厳格なサイズ制限(256バイト)や送付の保証が無いため、大量のデータ転送に使用するべきではありません。

プッシュ通知が到着した時にアプリケーションが実行されない場合、メソッドはアプリケーションを起動し、起動オプションの辞書に適切な情報を提供します。
アプリケーションはプッシュ通知を処理するために、このメソッドを呼び出しません。
代わりに、プッシュ通知のペイロードデータを取得し適切に対応する、application:willFinishLaunchingWithOptions:またはapplication:didFinishLaunchingWithOptions:メソッドを実装する必要があります。

アプリケーションにプッシュ通知を実装する方法についての詳細は、『LocalおよびPush Notificationプログラミングガイド』を参照してください。

利用可能
iOS 3.0以降で利用可能

宣言
UIApplication.h


・application:didRegisterForRemoteNotificationsWithDeviceToken:

アプリケーションがApple Push Service(APS)の登録に成功した時に、デリゲートに伝えます。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

パラメータ
application
リモート通知の登録プロセスを開始したアプリケーションを指定します。
deviceToken
APSにデバイスを識別するトークンを指定します。
デバイスに通知を送信する時、プロバイダがAPSサーバへ提出する必要がある形式のため、トークンのデータ型は不明瞭です。
APSサーバは、パフォーマンス上の理由からバイナリフォーマットを必要とします。
デバイストークンはUIDeviceのuniqueIdentifierプロパティとは異なり、セキュリティとプライバシー上の理由から、デバイスが消去された時は変える必要があることに注意してください。

解説
UIApplicationのregisterForRemoteNotificationTypes:メソッドが呼び出された後に、登録プロセスにエラーが無い場合、デリゲートはこのメッセージを受け取ります。
デバイストークンを受信した後、アプリケーションはプロバイダと接続し、トークンを与えます。
APSは、このトークンを伴っているアプリケーションのデバイスにのみ通知をプッシュします。
他にも稀な状況、例えばデバイスのバックアップデータではないデータからデバイスを復元した後に、ユーザがアプリケーションを起動した時に、このメソッドが呼び出される可能性があります。
この例外的な場合では、アプリケーションはユーザが起動するまで新しいデバイスのトークンを知ることができません。

アプリケーションにプッシュ通知を実装する方法についての詳細は、『LocalおよびPush Notificationプログラミングガイド』を参照してください。

利用可能
iOS 3.0以降で利用可能

宣言
UIApplication.h


・application:handleOpenURL:

URLで識別されるリソースを開くためにデリゲートに尋ねます。
非推奨。URLリソースを開くにはこのメソッドの代わりにapplication:openURL:sourceApplication:annotation:を使用してください。)

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

パラメータ
application
アプリケーションオブジェクトを指定します。
url
URL(Universal Resource Locator)を表すオブジェクトを指定します。
Appleが登録したURLスキームについては『Apple URL Scheme Reference』を参照してください。

戻り値
デリゲートがリクエストの処理に成功した場合はYES、URLの処理をするための試みが失敗した場合はNOになります。

解説
デリゲートがapplication:openURL:sourceApplication:annotation:メソッドも実装している場合、そのメソッドはこれの代わりに呼び出されます。

このメソッドは、デリゲートがapplication:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:メソッドの両方からNOを返された場合は呼び出されません。
(2つのメソッドの内の一つのみが実装されていた場合、戻り値はこのメソッドが呼び出されたかどうかを決定します。)
アプリケーションがapplication:didFinishLaunchingWithOptions:の代わりにapplicationDidFinishLaunching:メソッドを実装している場合、このメソッドはアプリケーションが初期化された後に指定されたURLを開くために呼び出されます。

アプリケーションが一時停止またはバックグラウンドでの実行中にURLが到着した場合、システムはこのメソッドを呼び出す前にフォアグラウンドにアプリケーションを移動します。

このデリゲーションメソッドのための同等の通知はありません。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・application:willChangeStatusBarFrame:

ステータスバーのフレームが変更された時にデリゲートに伝えます。

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。
newStatusBarFrame
画面座標系で、変更されたステータスバーのフレームを指定します。

解説
アプリケーションは、setStatusBarOrientation:animated:メッセージを受信してインターフェイスの向きを変更しようとしている時に、このメソッドを呼び出します。

このメソッドを呼び出した後、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationWillChangeStatusBarFrameNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・application:willChangeStatusBarOrientation:duration:

ステータスバーのインターフェイスの向きが変更される時にデリゲートに伝えます。

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。
newStatusBarOrientation
アプリケーションのユーザインターフェイスの新しい向きを示す定数です。
詳細は『アプリケーション状態変更の監視』を参照してください。
duration
新しい向きへのアニメーションの継続時間を秒単位で指定します。

解説
デリゲートは通常、新しい向きのウィンドウやビューを準備するために、このメソッドを実装します。
デリゲートは共有しているUIDeviceオブジェクトから、現在のデバイスの向きを取得することができます。

このメソッドを呼び出した後、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationWillChangeStatusBarOrientationNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationDidBecomeActive:

アプリケーションがアクティブになったことをデリゲートに伝えます。

- (void)applicationDidBecomeActive:(UIApplication *)application

パラメータ
application
シングルトンのアプリケーションインスタンスを指定します。

解説
このメソッドはアプリケーションが非アクティブ状態からアクティブ状態に移行したことを知らせるために呼び出されます。
これはユーザまたはシステムによってアプリケーションが起動されたために発生する可能性があります。
また(電話やSMSメッセージの着信などの)送信によりアプリケーションが一時的に非アクティブ状態になる中断をユーザが無視した場合に、アプリケーションはアクティブ状態に戻すことができます。

アプリケーションが非アクティブの期間に一時停止(またはまだ開始されていない)タスクを再起動するために、このメソッドを使用する必要があります。
例えば、タイマーの再起動やOpenGL ESのフレームレートの抑制の解放などに使用することができます。
アプリケーションが以前にバックグラウンドにあった場合、アプリケーションのユーザインターフェイスを再構築するためにも使用することができます。

このメソッドを呼び出した後、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationDidBecomeActiveNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationDidEnterBackground:

アプリケーションがバックグラウンドになっていることをデリゲートに伝えます。

- (void)applicationDidEnterBackground:(UIApplication *)application

パラメータ
application
シングルトンのアプリケーションインスタンスを指定します。

解説
iOS 4.0以降では、バックグラウンドでの実行をサポートするアプリケーションをユーザが終了する時に、applicationWillTerminate:メソッドの代わりにこのメソッドが呼び出されます。
このメソッドを使用する際には共有リソースの解放と、ユーザデータの保存、タイマーの無効化、それとアプリケーションを後で終了した場合に現在の状態を復帰させるために十分な状態情報を格納する必要があります。
また、アプリケーションのユーザインターフェイスの更新を無効にし、(ユーザの『連絡先』データベースなどの)共有しているシステムリソースを使用しているいくつかのタイプは無効にしてください。
更に、バックグラウンドでOpenGL ESの使用を無効にすることも必要です。

このメソッドの実装は、任意のタスクの実行から返すまでに約5秒かかります。
任意の最終的なタスクを実行するために追加の時間が必要な場合は、beginBackgroundTaskWithExpirationHandler:を呼び出すことによって、システムから追加する時間を要求することもできます。
実際には、できるだけ速くapplicationDidEnterBackground:から返す必要があります。
時間が無くなる前にメソッドが戻らなかった場合、アプリケーションは終了し、メモリから消去されます。

このメソッドが終了する前にユーザインターフェイスの調整に関連する全てのタスクを実行する必要がありますが、(状態の保存等の)他のタスクは同時ディスパッチキューまたは二次スレッドに必要に応じて移動する必要があります。
なぜなら、applicationDidEnterBackground:で開始したバックグラウンドのタスクは、おそらくメソッドが終了した後でもまだ実行されないので、これらのタスクを開始する前に追加のバックグラウンド実行時間を要求する必要があるからです。
言い換えると、最初にbeginBackgroundTaskWithExpirationHandler:を呼び出し、それからディスパッチキューまたは二次スレッド上でタスクを実行します。

またアプリケーションは関心のあるオブジェクトに移行に対応する機会を与えるために、このメソッドが呼び出されると同時に周囲にUIApplicationDidEnterBackgroundNotification通知を投稿します。

バックグラウンドへ優雅に移行する方法についての詳細や、終了時のバックグラウンドのタスクの開始方法についての情報は、『iOSアプリケーションプログラミングガイド』を参照してください。

利用可能
iOS 4.0以降で利用可能

宣言
UIApplication.h


・applicationDidFinishLaunching:

アプリケーションの起動が完了した時に、デリゲートに伝えます。

- (void)applicationDidFinishLaunching:(UIApplication *)application

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。

解説
このメソッドはアプリケーションの初期化と実行の準備をするために、以前のiOSのバージョンで使用されていました。
iOS 3.0以降では、代わりにapplication:didFinishLaunchingWithOptions:を使用する必要があります。
iOS 6.0以降では、アプリケーションの初期化にapplication:willFinishLaunchingWithOptions:を使用する場合があります。

このメソッドの実装では、アプリケーションのユーザインターフェイスの生成し、アプリケーションのデータ構造を初期化する必要があります。
アプリケーションが以前の起動との間でその状態を維持する場合、以前の状態にアプリケーションを復元するためにこのメソッドを使用します。

このメソッドを呼び出した後、関心のあるオブジェクトに初期化サイクルに対応する機会を与えるために、アプリケーションはUIApplicationDidFinishLaunchingNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationDidReceiveMemoryWarning:

アプリケーションがシステムからメモリの警告を受け取った時に、デリゲートに伝えます。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。

解説
このメソッドの実装では、後に再構成(またはディスクからの再読み込み)できるキャッシュされたデータオブジェクトを破棄し、可能な限り多くのメモリを解放する必要があります。
アプリケーション全体のメモリを解放するには、UIViewControllerクラスのdidReceiveMemoryWarningUIApplicationDidReceiveMemoryWarningNotification通知を一緒に使用します。

このメソッドの実装を強く推奨します。
メモリ不足の状態の際に、アプリケーションが十分にメモリを解放できなかった場合は、システムが完全に終了すことがあります。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationSignificantTimeChange:

時刻が大幅に変更された時に、デリゲートに伝えます。

- (void)applicationSignificantTimeChange:(UIApplication *)application

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。

解説
大幅な時刻の変更の例としては、深夜の到着、キャリアによる時刻の更新、夏時間への変更などがあります。
デリゲートはアプリケーションのオブジェクトの表示時刻や、時刻変更の感度を調整をするために、このメソッドを実装することができます。

このメソッドを呼び出す前に、関心のあるオブジェクトに変更に対応する機会を与えるために、アプリケーションはUIApplicationSignificantTimeChangeNotification通知を投じます。

アプリケーションが現在一時停止している場合、このメッセージはアプリケーションがフォアグラウンドに戻るまでキューに入れられ、その時点で送付されています。
複数の時刻変更が発生した場合、最新のもののみ送付されます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationWillEnterForeground:

アプリケーションがフォアグラウンドに入ろうとしていることを、デリゲートに伝えます。

- (void)applicationWillEnterForeground:(UIApplication *)application

パラメータ
application
シングルトンのアプリケーションインスタンスを指定します。

解説
iOS 4.0以降では、このメソッドはバックグラウンドからアクティブ状態への移行の一部として呼び出されます。
このメソッドを使用して、アプリケーションがバックグラウンドに入る際に行った変更の多くを元に戻すことができます。
このメソッドの呼び出しの後は常にapplicationDidBecomeActive:メソッドの呼び出しが行われ、その後アプリケーションが非アクティブからアクティブ状態に移動します。

このメソッドを呼び出す直前に、関心のあるオブジェクトに移行に対応する機会を与えるために、アプリケーションはUIApplicationDidEnterBackgroundNotification通知を投じます。

利用可能
iOS 4.0以降で利用可能

宣言
UIApplication.h


・applicationWillResignActive:

アプリケーションが非アクティブになることを、デリゲートに伝えます。

- (void)applicationWillResignActive:(UIApplication *)application

パラメータ
application
シングルトンのアプリケーションインスタンスを指定します。

解説
このメソッドはアプリケーションがアクティブから非アクティブ状態に移行することを知らせるために呼び出されます。
(電話やSMSメッセージの着信などの)特定の種類の一時的な休止や、ユーザがアプリケーションを終了しバックグラウンド状態への移行した時に発生する可能性があります。
非アクティブ状態のアプリケーションは実行を続けますが、レスポンダへの着信イベントはディスパッチされません。

進行中のタスクの一時停止、タイマーの無効化、OpenGL ESのフレームレートの抑制には、このメソッドを使用する必要があります。
ゲームでは、ゲームの一時停止にこのメソッドを使用する必要があります。
アクティブまたはバックグラウンド状態のいずれかへの移行を待っている間、非アクティブ状態のアプリケーションは最小限の作業を行う必要があります。
このメソッドを呼び出した後、関心のあるオブジェクトに移行に対応する機会を与えるために、アプリケーションはUIApplicationWillResignActiveNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h


・applicationWillTerminate:

アプリケーションが終了する時に、デリゲートに伝えます。

- (void)applicationWillTerminate:(UIApplication *)application

パラメータ
application
デリゲートするアプリケーションオブジェクトを指定します。

解説
このメソッドはアプリケーションが終了して完全にメモリから破棄されることを知らせます。
共有リソースの解放やユーザデータの保存、タイマーの無効化など、アプリケーションの最終的なクリーンアップタスクを実行するために、このメソッドを使用する必要があります。
このメソッドの実装は、任意のタスクを実行してから返すまでに約5秒かかります。
時間が無くなる前にメソッドが戻らなかった場合、システムは完全にプロセスを抹消する場合があります。

バックグラウンドでの実行をサポートしていない、またはiOS 3.x以前にリンクされたアプリケーションの場合、ユーザがアプリケーションを終了する時にこのメソッドは常に呼び出されます。
バックグラウンドでの実行をサポートするアプリケーションでは、ユーザがアプリケーションを終了する場合はアプリケーションは単純にバックグラウンドへ移動するので、このメソッドは一般的に呼び出されません。
ただしアプリケーションが(一時停止ではなく)バックグラウンドで実行されていて、システムがいくつかの理由により終了する必要がある場合は、このメソッドを呼び出す可能性があります。

このメソッドを呼び出した後、関心のあるオブジェクトに移行に対応する機会を与えるために、アプリケーションはUIApplicationWillTerminateNotification通知を投じます。

利用可能
iOS 2.0以降で利用可能

宣言
UIApplication.h



参考文献

UIApplicationDelegate Protocol Reference

UIResponderクラス

2013. 05. 10
・継承
NSObject

・準拠
NSObject(NSObject)

・フレームワーク
/System/Library/Frameworks/UIKit.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
iOSイベント処理ガイド

・宣言
UIResponder.h



●概要

UIResponderクラスはイベント処理とその応答に対するオブジェクトのインターフェイスを定義します。
UIApplicationやUIViewおよび(UIWindowを含む)それらのサブクラスのスーパークラスです。
これらのクラスのインスタンスは、しばしばレスポンダオブジェクトまたは単にレスポンダと呼ばれます。

イベントには一般的にタッチイベントとモーションイベントの2つがあります。
主なタッチのイベント処理メソッドにはtouchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:touchesCancelled:withEvent:があります。
これらのメソッドのパラメータはタッチによる(特に新規または変更の)イベントに関連付けされ、マルチタッチシーケンスのフェーズを介して、タッチ操作のイベントの経過について方法と処理をレスポンダオブジェクトに渡します。
指がスクリーンに触れたり、スクリーンをドラッグしたり、スクリーンから離したりした時に、UIEventオブジェクトが生成されます。
イベントオブジェクトにはスクリーンに指を乗せたり離したりした全てのUITouchオブジェクトを含みます。

iOS 3.0では、デバイスのシェイクなど、モーションイベントを生成する機能がシステムに導入されています。
このようなイベント処理のメソッドには、motionBegan:withEvent:motionEnded:withEvent:motionCancelled:withEvent:があります。
さらにiOS 3.0ではcanPerformAction:withSender:メソッドが追加され、レスポンダはユーザインターフェイスの命令として、レスポンダチェイン内の直近のNSUndoManagerオブジェクトを返すundoManagerプロパティを有効にすることができます。

iOS 4.0では、UIResponderにリモートコントロールイベントを処理するためのremoteControlReceivedWithEvent:メソッドが追加されました。



●タスク

●レスポンダチェーンの管理

– nextResponder
– isFirstResponder
– canBecomeFirstResponder
– becomeFirstResponder
– canResignFirstResponder
– resignFirstResponder

●入力ビューの管理

  inputView    プロパティ
  inputAccessoryView    プロパティ
– reloadInputViews

●タッチイベントの応答

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:

●モーションイベントの応答

– motionBegan:withEvent:
– motionEnded:withEvent:
– motionCancelled:withEvent:

●リモートコントロールイベントの応答

– remoteControlReceivedWithEvent:

●アンドゥマネージャの取得

  undoManager    プロパティ

●コマンドの検証

– canPerformAction:withSender:



●プロパティ



●インスタンスメソッド

becomeFirstResponder

ウィンドウのファーストレスポンダになることをレシーバに通知します。

- (BOOL)becomeFirstResponder

戻り値
レシーバがファーストレスポンダ状態を受理した場合はYES、拒否した場合はNOになります。
デフォルトの実装ではYESを返し、ファーストレスポンダ状態を受理します。

解説
サブクラスは、選択による強調表示など状態の更新やいくつかのアクションを実行するために、このメソッドをオーバーライドすることができます。

ファーストレスポンダになれるレスポンダオブジェクトは一つのみで、現在のレスポンダがファーストレスポンダ状態を放棄(canResignFirstResponder)すると、新しいレスポンダがファーストレスポンダになることができます。

このメソッドを呼び出すことによって、ビューなどをファーストレスポンダとしてレスポンダオブジェクトを作成することができます。
ただしビュー階層内にあるビューからのみ呼び出せます。
ビューのwindowプロパティがUIWindowオブジェクトを保持している場合、それはビュー階層内にインストールされ、nilを返した場合はビューが任意の階層から切り離されます。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h


resignFirstResponder

ウィンドウ内のファーストレスポンダとしての状態を放棄するように訊ねられたことを、レシーバに通知します。

- (BOOL)resignFirstResponder

解説
デフォルトの実装ではYESを返し、ファーストレスポンダ状態を放棄します。
サブクラスでは、選択による非強調表示など状態の更新や、あるいはNOを返してファーストレスポンダ状態の放棄を拒否するなど、いくつかのアクションを実行するためにこのメソッドをオーバーライドすることができます。
このメソッドをオーバーライドする場合、コード内のいくつかの時点で(スーパークラスの実装である)superを呼び出す必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h


touchesBegan:withEvent:

ビューまたはウィンドウ内で、指が一本以上タッチした時にレシーバに伝えます。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

パラメータ
touches
eventによって表された、イベントの開始フェイズのためのタッチ操作を表す、UITouchインスタンスのセットを指定します。
event
タッチ操作が属するイベントを表すオブジェクトを指定します。

解説
このメソッドはデフォルトでは何も実装しません。
しかしUIKitにおけるUIResponderの直近のサブクラス、特にUIViewのレスポンダチェーンにメッセージを転送します。
次のレスポンダにメッセージを転送するには、以下のように(スーパークラスの実装である)superにメッセージを送信し、次のレスポンダに直接メッセージを送信しないでください。

[super touchesBegan:touches withEvent:event];

このメソッドを(一般的な使用パターンである)superの呼び出しをせずにオーバーライドする場合、スタブ(空)実装としてのみであるなら、タッチイベント処理のため他のメソッドもオーバーライドする必要があります。

マルチタッチはデフォルトでは無効になっています。
マルチタッチイベントを受信するには、対応するビューのインスタンスのmultipleTouchEnabledプロパティをYESに設定する必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h


touchesCancelled:withEvent:

(低メモリ警告などの)システムイベントがタッチイベントをキャンセルした時にレシーバに伝えます。

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

パラメータ
touches
eventによって表された、イベントの終了フェイズのためのタッチ操作を表す、UITouchインスタンスのセットを指定します。
event
タッチ操作が属するイベントを表すオブジェクトを指定します。

解説
このメソッドは、Cocoa Touchフレームワークがタッチイベントのキャンセルを必要とするシステムの中断を受信した時に呼び出され、UITouchPhaseCancelのフェイズを伴うUITouchオブジェクトが生成されます。
この中断は、アプリケーションが既にアクティブではない、またはウィンドウからビューが削除されたことが原因である可能性があります。

オブジェクトがtouchesCancelled:withEvent:メッセージを受信した時、touchesBegan:withEvent:の実装内に確立した状態情報をクリーンアップする必要があります。

このメソッドはデフォルトでは何も実装しません。
しかしUIKitにおけるUIResponderの直近のサブクラス、特にUIViewのレスポンダチェーンにメッセージを転送します。
次のレスポンダにメッセージを転送するには、以下のように(スーパークラスの実装である)superにメッセージを送信し、次のレスポンダに直接メッセージを送信しないでください。

[super touchesCancelled:touches withEvent:event];

このメソッドを(一般的な使用パターンである)superの呼び出しをせずにオーバーライドする場合、スタブ(空)実装としてのみであるなら、タッチイベント処理のため他のメソッドもオーバーライドする必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h


touchesEnded:withEvent:

ビューまたはウィンドウから、指を一本以上離した時にレシーバに伝えます。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

パラメータ
touches
eventによって表された、イベントの終了フェイズのためのタッチ操作を表す、UITouchインスタンスのセットを指定します。
event
タッチ操作が属するイベントを表すオブジェクトを指定します。

解説
このメソッドはデフォルトでは何も実装しません。
しかしUIKitにおけるUIResponderの直近のサブクラス、特にUIViewのレスポンダチェーンにメッセージを転送します。
次のレスポンダにメッセージを転送するには、以下のように(スーパークラスの実装である)superにメッセージを送信し、次のレスポンダに直接メッセージを送信しないでください。

[super touchesEnded:touches withEvent:event];

オブジェクトがtouchesEnded:withEvent:メッセージを受信した時、touchesBegan:withEvent:の実装内に確立した状態情報をクリーンアップする必要があります。

マルチタッチはデフォルトでは無効になっています。
マルチタッチイベントを受信するには、対応するビューインスタンスのmultipleTouchEnabledプロパティをYESに設定する必要があります。

このメソッドを(一般的な使用パターンである)superの呼び出しをせずにオーバーライドする場合、スタブ(空)実装としてのみであるなら、タッチイベント処理のため他のメソッドもオーバーライドする必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h


touchesMoved:withEvent:

ビューまたはウィンドウ内で、一本以上の指に関連付けされたイベントが移動した時にレシーバに伝えます。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

パラメータ
touches
eventによって表された、イベント中の移動タッチ操作を表す、UITouchインスタンスのセットを指定します。
event
タッチ操作が属するイベントを表すオブジェクトを指定します。

解説
このメソッドはデフォルトでは何も実装しません。
しかしUIKitにおけるUIResponderの直近のサブクラス、特にUIViewのレスポンダチェーンにメッセージを転送します。
次のレスポンダにメッセージを転送するには、以下のように(スーパークラスの実装である)superにメッセージを送信し、次のレスポンダに直接メッセージを送信しないでください。

[super touchesMoved:touches withEvent:event];

マルチタッチはデフォルトでは無効になっています。
マルチタッチイベントを受信するには、対応するビューインスタンスのmultipleTouchEnabledプロパティをYESに設定する必要があります。

このメソッドを(一般的な使用パターンである)superの呼び出しをせずにオーバーライドする場合、スタブ(空)実装としてのみであるなら、タッチイベント処理のため他のメソッドもオーバーライドする必要があります。

利用可能
iOS 2.0以降で利用可能

宣言
UIResponder.h



参考文献

UIResponder Class Reference

Wikipedia/スタブ

ストーリーボードへの変換のリリースノート

2013. 05. 09
ストーリーボードはiOSアプリケーションのユーザインターフェイスを作成するための新しい方法で、iOS 5およびXcode 4.2から利用することができます。
ストーリーボードを使用すると、Xcodeの設計キャンバスにシーンとしてアプリケーションを構成するビューコントローラを設計し、セグエを使用してシーン間のナビゲーションを視覚的に定義することができます。

ストーリーボードを使用するように既存のiOSアプリケーションのプロジェクトを変換するには、いくつかの工程が必要となります。
更に採用することができる他の新しいパターンもあります。



目次

アプリケーションデリゲートの構成

プロジェクトへのストーリーボードの追加

プロジェクトのメインストーリーボードの設定

最初のビューコントローラへのアクセス

テーブルビューの構成



アプリケーションデリゲートの構成

アプリケーションデリゲートは、ストーリーボードの読み込みとウィンドウの管理をする責任があります。
貴方はUIApplicationMainのアプリケーションデリゲート名を指定し、アプリケーションデリゲートがwindowを呼び出してプロパティを保持する責任があります。

既存のアプリケーションデリゲートクラスを持っていない場合は、生成する必要があります。
最小限の実装は以下のようになります。

リスト1-1 最小アプリケーションデリゲートヘッダファイル

#import <UIKit/UIKit.h>
@interface AppDelegate : NSObject <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

リスト1-2 最小アプリケーションデリゲート実装ファイル

#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@end

:現在のXcodeテンプレートでは、アプリケーションデリゲートクラスはUIResponderを継承しています。
これはデリゲートのインスタンスがレスポンダチェーンに参加し、アプリケーションレベルのアクションの処理ができるようにするためです。
既存のアプリケーションでこのパターンの使用を用いていない場合、ストーリーボードのために採用する必要はありません。

main.mファイルでは、UIApplicationMainでアプリケーションデリゲートクラスを設定しています。

既存のmain.mファイルはおそらくこのようになっています。

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

以下のように変更します。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char *argv[]) {

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

(アプリケーションデリゲートクラス名は"AppDelegate"に置換しています。)

:@autoreleasepoolは自動解放プールを管理するための新しいObjective-C文です。
全てのObjective-Cモードで利用することができ、NSAutoReleasePoolクラスを使用するよりも効率的です。
(『ARCへの移行のリリースノート』参照)



プロジェクトへのストーリーボードの追加

プロジェクトに新しいストーリーボードファイルを追加します。
慣例により、初期ストーリーボードはMainStoryboardと名付けられています。

オブジェクトライブラリからストーリーボードに最初のビューコントローラを追加します。
それが最初のシーンであることを示すソース無しセグエが表示されるはずです。

firstViewController.png

最初のビューコントローラがナビゲーションコントローラやタブバーコントローラとしてコンテナに組み込まれている場合、適切にそれを組み込むために『Editor > Embed In』を使用します。
ソース無しセグエは、現在コンテナビューコントローラを示している必要があります。

embeddedFirstViewController.png



プロジェクトのメインストーリーボードの設定

アプリケーションターゲットのSummaryでは、貴方が生成したストーリーボードファイル名にMain Storyboardの値を設定します。
Main Interface(最初のnibファイルの指定で)の値が存在する場合は、それを削除してください。

setMainStoryboard.png



最初のビューコントローラへのアクセス

アプリケーションデリゲートはストーリーボードで表現されません。
(例えば、Core Dataアプリケーションを作成し、最初のビューコントローラにデリゲートの管理オブジェクトコンテキストを渡したい場合など)最初のビューコントローラにアクセスする必要がある場合、ウィンドウのrootViewControllerを介して行うことができます。
ルートビューコントローラが(UINavigationControllerのインスタンスなど)コンテナコントローラの場合、コンテナのコンテンツのために適切なアクセサを使用してビューコントローラにアクセスすることができます。
例えば、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UINavigationController *rootNavigationController = (UINavigationController *)self.window.rootViewController;
    MyViewController *myViewController = (MyViewController *)[rootNavigationController topViewController];
    // Configure myViewController.
    return YES;
}



テーブルビューの構成

ストーリーボードを使用する時に、テーブルビューでの作業にいくつかの新しい方法があります。
  • dequeueReusableCellWithIdentifier:メソッドは(与えられた識別子を持つセルを定義している場合)セルを返すことが保証されています。
    したがって、以前の通常のtableView:cellForRowAtIndexPath:の実装の際の、"メソッドの戻り値をチェックする"パターンを使用する必要はありません。
    つまり以前の記述、

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    } // Configure and return the cell.

    の代わりに、今は以下のように記述します。

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // Configure and return the cell.

  • テーブルビューのテーブルビューセルを直接構成することができます。
    デフォルトではプロトタイプのセルスタイルはCustomに設定されていますが、貴方の独自設計のセルにすることができます。
    またAttributes Inspectorを使用することによって、組み込みのUITableViewCellのセルスタイルの一つにスタイルを設定することができます。

    cellStyle.png

  • テーブルビュー、つまりUITableViewControllerのインスタンスのビューは、ストーリーボードに直接静的コンテンツを構成することができます。
    Attributes Inspectorで、Static Cellsにテーブルビューのコンテンツを設定します。

    staticCells.png

    静的セルを使用する場合、実行時にセルの内容を構成することができるように、個々のセルにテーブルビューコントローラからアウトレットを接続することができます。

    // Declare properties for the outlets.
    @property (nonatomic, weak) IBOutlet UITableViewCell *firstGroupFirstRowCell;

    // Configure cells directly.
    firstGroupFirstRowCell.detailTextLabel.text = newTextValue;



参考文献

Apple/Converting to Storyboards Release Notes

0 CommentsPosted in 資料

Xcode 3.2.6から4.6.2でのテンプレートの変化(1)〜main.m

2013. 05. 08
ARCやストーリーボードの導入などXcodeのバージョンアップに因り、自動生成されるテンプレートの内容も大分変わりました。
以前勉強していたものの途中で中断し、最近になって再開された方の多くは戸惑うことと思います。

ここでは『初めてのiOSプログラミング 第2版』で読んで、浦島太郎状態からのリハビリをする過程で気付いた変更点や留意点をまとめていきます。


●比較対象

比較対象となるIDEはXcode 3.xシリーズの最終版であるXcode 3.2.6(以降『旧版』)と、現行のXcode 4.6.2(以降『新版』)になります。
テンプレートは旧版がView-based Application、新版がSingle View Applicationとなります。


●main.mの比較

まずは旧版と新版のmain.mのソースコードを比較します。

旧版)

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

新版)

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


1)AppDelegate.hのインポート

新版ではアプリケーションデリゲートクラスのヘッダファイルAppDelegate.hのインポートが追加されています。
これは後述するUIApplicationMain関数において、第4引数のアプリケーションデリゲートクラスを指定するためのものです。


2)NSAutoreleasePoolオブジェクトから@autoreleasepoolブロックへの移行

ARC導入に伴い、従来のNSAutoreleasePoolオブジェクトの使用は禁止され、@autoreleasepoolブロックを使用するように改められました。

これは実際にARCを利用するか否かに関わらず適用され、プロジェクト生成時にARCを利用しない(『Use Automatic Reference Counting』のチェックを外す)場合でも@autoreleasepoolブロックの形式になります。

NSAutoreleasePoolクラス』や『What's New in iOS〜iOS 5.0〜自動参照カウント』、『ARCへの移行のリリースノート』などを参照してください。


3)UIApplicationMain関数の第4引数の指定

UIApplicationMain関数の第4引数は、インスタンス化するアプリケーションデリゲートのクラス名を指定するものです。

旧版では『アプリケーションのメインnibファイルからデリゲートオブジェクトを読み込む場合』として、デフォルトでnilが指定されていました。

新版で直接アプリケーションデリゲートクラスを指定するようになったのは、Xcode 4.2で導入されたストーリーボードの影響と思われます。

ユーザインターフェイスを構築するツールとしてInterface Builderを置換するストーリーボードを導入(プロジェクト生成時に『Use Storyboards』をチェック)した場合、プロジェクトにnibファイルは生成されず、代わりにstoryboardファイルが生成されます。

したがってストーリーボード導入の可否に左右されないように、アプリケーションデリゲートクラスを直接指定する形式に変更されたものと推測できます。



参考文献

初めてのiOSプログラミング 第2版初めてのiOSプログラミング 第2版
(2012/10/20)
Alasdair Allan

商品詳細を見る






Bose QuietComfort 25
Calendar
04 | 2013/05 | 06
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
Recent Articles
iTunes


Swift
Categories
Tips
WACOM


Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
BOSE

Bose QuietComfort 25
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
SQLite
OpenGL ES
Amazon


Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Profile

Author:水月杏香
永遠の初心者プログラマ。

QR Code
QR
Visitors