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

2013. 06. 11
旧版のビューコントローラクラスにもプロジェクト名の接頭辞が付くのでHelloWorldViewControllerになっています。



●ViewController.hの比較

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

旧版)

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController {
}


@end

新版)

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end


1)インスタンス変数の宣言について

Xcode 3.2.6から4.6.2でのテンプレートの変化(2)〜AppDelegate』の『AppDelegate.hの比較』で説明したように、ヘッダファイルでのインスタンス変数の宣言は行わないことになったので、波括弧も省略されています。



●ViewController.mの比較

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

旧版)

#import "HelloWorldViewController.h"

@implementation HelloWorldViewController

/*
// 指定イニシャライザです。ビューが読み込まれる前に必要となる設定を行うためにオーバーライドします。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // カスタムの初期化
    }
    return self;
}

*/

/*
// nibファイルを使用せずに、プログラムでビュー階層を生成するにはloadViewを実装します。
- (void)loadView {
}

*/

/*
// (通常はnibから)ビューを読み込んだ後に追加の設定を行うにはviewDidLoadを実装します。
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/

/*
// デフォルトのポートレート以外の向きを可能にするにはオーバーライドします。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // サポートする向きに対してYESを返します。
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

*/


- (void)didReceiveMemoryWarning {
    // スーパービューを持っていない場合はビューを解放します。
    [super didReceiveMemoryWarning];

    // キャッシュされているデータ、画像、その他使用されていないものを解放します。
}

- (void)viewDidUnload {
    // 保持されているメインビューのサブビューを解放します。
    // 例えば、self.myOutlet = nil;

}

- (void)dealloc {
    [super dealloc];
}


@end

新版)

#import "ViewController.h"

@interface ViewController ()

@end


@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // (通常はnibから)ビューを読み込んだ後に追加の設定を行います。
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // 再構成することができるリソースを破棄します。
}

@end


1)インスタンス変数の宣言の追加

上記の『ViewController.hの比較』で述べたように、インスタンス変数の宣言はヘッダファイルではなくソースファイルで行うようになっています。
(テンプレートでは実際にインスタンス変数を宣言していなく、空実装になっています。)


2)initWithNibName:bundle:の削除

旧版ではinitWithNibName:bundle:メソッドによって、nibファイルからビューコントローラの読み込みと初期化を行うようになっていますが、新版ではアプリケーションデリゲートAppDelegateクラスのapplication:didFinishLaunchingWithOptions:メソッド内で行っています。

詳細は『Xcode 3.2.6から4.6.2でのテンプレートの変化(2)〜AppDelegate』を参照してください。


3)loadViewの削除

旧版ではコードによってビュー生成を行うloadViewメソッドが(コメントアウトで)実装されていますが、新版では省略されています。


4)shouldAutorotateToInterfaceOrientation:の削除

iOS 6のiOS SDKリリースノート』の『注釈と既知の問題』の『UIKit』の項で、shouldAutorotateToInterfaceOrientation:メソッドはiOS 6で非推奨であると説明されており、テンプレートから削除されています。

『自動回転はiOS 6で変更されています。
iOS 6では
UIViewControllershouldAutorotateToInterfaceOrientation:メソッドは推奨されていません。
そこでは
supportedInterfaceOrientationsForWindow:shouldAutorotateメソッドを使用する必要があります。』

詳細は同項を参照してください。


5)viewDidUnloadの削除

iOS 6のiOS SDKリリースノート』の『注釈と既知の問題』の『UIKit』の項で、viewDidUnloadメソッドはiOS 6で非推奨であると説明されており、テンプレートから削除されています。

『iOS 6では、UIViewControllerviewWillUnloadviewDidUnloadメソッドは非推奨になっています。
データの解放にこれらのメソッドを使用していた場合、代わりに
didReceiveMemoryWarningメソッドを使用してください。
また使用していなかった場合、ビューコントローラのビューへの参照を解放するために、このメソッドを使用することができます。
これを行う前にビューがウィンドウに無いことをテストする必要があります。』



6)deallocの削除

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



参考文献

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

商品詳細を見る

iOS 6のiOS SDKリリースノート

2013. 06. 09
内容:

はじめに
バグレポート
注釈と既知の問題



はじめに

iOS 6 SDKはiOSアプリケーションを開発するためのサポートを提供するもので、iOSとOS X用のアプリケーションを生成するためのXcodeツール、コンパイラ、フレームワークの完全なセットが含まれています。
これらのツールには、Xcode IDEやInstruments分析ツールなどの多くが含まれています。

このソフトウェアでは、iOS 6を実行するiPhone、iPad、iPod touch用のアプリケーションを開発することができます。
また含まれているiOS 6をサポートするiOSシミュレータを使用して、アプリケーションのテストをすることもできます。
iOS 6 SDKは、OS X 10.7.4(Lion)以上を実行しているMacコンピュータが必要です。

このiOSのバージョンはAppleのデベロッパプログラムに登録されたデバイスにのみインストールすることを意図しています。
不正な方法でこのiOSのバージョンのインストールを試みると、デバイスが使用不能な状態になります。

詳細や追加のサポートリソースについては、iOS Developer Programをご覧ください。



バグレポート

注釈と既知の問題』の項で言及されていないバグ報告については、AppleデベロッパウェブサイトのAppleバグレポータ(Bug Reporting)を使用してください。
またAppleデベロッパフォーラム(http://devforums.apple.com)で、これらの問題やiOS 6 SDKを議論することができます。
開発者向けのiCloudについての詳細についてはiCloud for Developersで取得することができます。



注釈と既知の問題

以下の問題は、コードの開発でiOS 6 SDKを使用する際に関連します。


●Accountsフレームワーク



●Address Book

  • 連絡先へのアクセス要求

    ユーザは各アプリケーションごとに連絡先データへのアクセスを許可または拒否することができます。
    連絡先データへのアクセス要求をするには、ABAddressBookCreateWithOptions関数を呼び出した後に、ABAddressBookRequestAccessWithCompletion関数を呼び出します。
    ABAddressBookRequestAccessWithCompletion関数は、アクセスの許可または拒否をユーザに尋ねている間はアプリケーションをブロックしません。
    アクセスが許可されるまで、ABAddressBookRefオブジェクトには連絡先が含まれず、連絡先の修正を試みてもkABOperationNotPermittedByUserErrorエラーで失敗します。
    ユーザは最初にアクセスを要求する場合のみ伺いを求めます。
    以降のABAddressBookCreateWithOptionsの呼び出しには既存の許可を使用します。
    完了ハンドラは任意のキューで呼び出されます。
    ABAddressBookRefオブジェクトがアプリケーション全体で使用されている場合、全ての処理はスレッドセーフな方法でABAddressBookRefを使用するために同じキューにディスパッチされる必要があります。

  • アクセス許可状態のチェック

    アプリケーションは連絡先、カレンダー、リマインダー、またはフォトライブラリにアクセスできるかどうかをチェックするための、許可状態APIを使用することができます。
    このAPIは要求アクセスAPIから独立しており、ユーザにアクセスを許可または拒否するかを尋ねません。
    このAPIを使用するアプリケーションは、データクラスにアクセスするUI要素の表示を調整することができます。
    例えば、連絡先へのアクセスが許可または決定されていない場合、連絡先を選択するためのUIボタンを表示することができます。

    Address Bookの場合は、ABAddressBookGetAuthorizationStatus関数を呼び出します。
    Event Kitの場合は、EKEventStoreauthorizationStatusForEntityType:クラスメソッドを呼び出します。
    Assets Libraryの場合は、ALAssetsLibraryauthorizationStatusクラスメソッドを呼び出します。
    返される状態値の意味は以下の通りです。

    • Authorization Status Not Determined(許可状態が決定されていない)
      このアプリケーションがデータクラスにアクセスできるかどうかについて、まだ選択が行われていません。

    • Authorization Status Restricted(許可状態が制限されている)
      このアプリケーションはデータクラスへのアクセスが許可されていません。
      おそらく適切なペアレントコントロールなどのアクティブ制限のため、ユーザがこのアプリケーションの状態を変更することができません。

    • Authorization Status Denied(許可状態が拒否されている)
      ユーザが明示的にこのアプリケーションのデータクラスへのアクセスを拒否しています。

    • Authorization Status Authorized(許可状態が許可されている)
      このアプリケーションはデータクラスへのアクセスを許可されています。


●オーディオ

  • iOS 6から、アプリケーションはCoreMIDIのMIDISourceCreateMIDIDestinationCreate関数を使用するために、それらのUIBackgroundModesでオーディオキーを持つ必要があります。
    キーセットが無い場合、これらの関数はkMIDINotPermitted (-10844)を返します。


●Bonjour

  • NSNetServiceクラスとCFNetService APIは、デフォルトでP2Pインターフェイスを含んでいません。
    P2Pインターフェイスを介してサービスを閲覧、登録、または決定するには、アプリケーションが下記のBonjour DNSService*() APIを使用する必要があります。

  • 以下のAPIでkDNSServiceInterfaceIndexAnyにinterfaceIndexパラメータを設定すると、デフォルトではP2Pインターフェイスを含みません。
    P2Pインターフェイスを含めるには、kDNSServiceInterfaceIndexAnyを使用する時にkDNSServiceFlagsIncludeP2Pフラグを設定するか、kDNSServiceInterfaceIndexP2PにinterfaceIndexを設定する必要があります。
    影響を受けるAPIは次の通りです。

    • DNSServiceBrowse
    • DNSServiceRegister
    • DNSServiceResolve
    • DNSServiceRegisterRecord
    • DNSServiceQueryRecord


●Core Image



●Event Kit

  • カレンダーまたはリマインダーへのアクセスを要求する場合、

    ユーザはアプリケーションごとにイベントやリマインダーのデータへのアクセスを、許可または拒否することができます。
    イベントおよび(または)リマインダーのデータへのアクセスを要求するには、EKEventStorerequestAccessToEntityType:completion:メソッドを呼び出します。
    アクセスの許可または拒否をユーザに尋ねている間はアプリケーションをブロックしません
    アクセスがエンティティ型の許可を得るまで、イベントストアはエンティティ型のカレンダーを含まず、データの保存を試みると失敗します。

    ユーザは最初にアクセスを要求する場合のみ伺いを求めます。
    以降のEKEventStoreインスタンス化は既存の許可を使用します。
    完了ハンドラは任意のキューで呼び出されます。


●Game Center

  • ランドスケープ専用のアプリケーションでの(Game Centerのログイン画面などの)ポートレート専用のビューコントローラの呼び出しは、アプリケーションがクラッシュする原因となります。

    回避策:

    1. アプリケーションはapplication:supportedInterfaceOrientationsForWindow:デリゲートメソッドの提供し、ポートレートが返されるマスク値の一つであることを保証する必要があります。

    2. UINavigationControllerを伴う場合、UINavigationControllerをサブクラス化しsupportedInterfaceOrientationsをオーバーライドします。


●iCloud

  • iCloudアカウントを作成する時、任意の電子メールベースのApple IDまたは既存のiCloudアカウントを使用することができます。
    iCloudに移行しなかったMobileMeアカウントを持っていた場合、(以前のMobileMeのデータは存在しませんが)新規のiCloudアカウントにサインアップすることでApple IDを使用することができます。

    icloud.comの電子メールがwww.icloud.comから送信されることはありません。
    この時点で、icloud.comアドレスから電子メールを送信するためにウェブブラウザを使用したい場合、ユーザはhttp://beta.icloud.comに行く必要があります。

  • プロビジョニングプロファイルは、iOS プロビジョニングポータルでiCloudを有効にする必要があります。
    プロビジョニングプロファイルでiCloudを有効にすると、iOSプロビジョニングポータルのApp IDセクションに移動し、iCloud用にApp IDを設定します。
    iCloud用にApp IDを有効にした後、iCloud用にそれらを有効にするためにプロビジョニングプロファイルを再生成します。

  • NSMetadataQueryのsetSortDescriptors:メソッドはサポートされていません。

  • iOS 6では、Data Protectionを経由して保護されているファイルはiCloud Storage APIで使用することはできません。

  • OS Xではファイル名の大文字と小文字を区別しませんが、iOSでは区別します。
    iCloudを使用して2つのプラットフォーム間でファイルを共有すると、問題に繋がることになります。
    iOSでは、場合によってのみ異なる名前でファイルを生成することは避けてください。

  • iCloudドキュメントの協調読み込み操作の動作が変更されました。

    以前のiOSのリリースでは、アプリケーションがファイルまたはパッケージの協調読み込み操作を実行して、iCloudデーモンが利用可能なアイテムの新しいバージョンに気付いた時、アイテムの新しいバージョンがダウンロードされてディスクに書き込まれるまで協調読み込み操作はブロックされました。

    現在のiOS 6では、既に持っているローカルバージョンでファイルまたはパッケージの協調読み込み操作が開始された時、協調読み込みはできるだけ早く応じられ、新しいバージョンはバックグラウンドでダウンロードされます。
    この呼び出しは、ローカルに利用可能なファイルのバージョンを持っていない場合のみ、ダウンロードを判断するためにブロックされます。

    更にファイルが競合している時は、アプリケーションが利用可能なファイルを作成するために、ファイルの全ての競合敗者になるまでiCloudデーモンは待機しません。
    それらがすぐに利用できるように、競合したファイルの異なるバージョンを作成します。
    アプリケーションは、既存のファイルを協調して競合敗者がダウンロードされて利用可能になった時に通知されるUIDocumentのコールバックを使用することができます。


●iTunes

  • iTunes 10.6.3はiOS 6 SDKが必要です。

  • iOSの以前のパブリックベータ版はiTunes Matchの曲をダウンロードすることはできません。


●ロケーション



●マップ

  • iOS 6以降では、Map KitはAppleが主催する新しいインフラストラクチャ上に構築されています。

    以前のiOSリリースでは引き続きGoogleのサービスを使用しています。

    APIの互換性は維持されます(以下の既知の問題を参照)。

    マップは現在シミュレータでサポートされています。

    マップデータは徐々に進化していきます(高解像度衛星画像は一部のみ現在利用できます)。

  • 開発中にカバレッジファイルを指定しないルーティングアプリケーションは、常にマップ内にルーティングの検索結果が表示されます。

  • ルーティングアプリケーション用のカバレッジファイルのテストやデバッグは、XcodeのRunワークフローでの開発中でのみサポートされています。
    (スキームエディタのRunセクションのOptionsペインを使用して、Runスキームにカバレッジファイルを指定することができます。)
    デバイスに対して(App Store以外で)アーカイブされ配布されたアプリケーションは、アプリケーションのカバレッジファイルへのアクセスを持っていない可能性があります。

  • 開発者はMKMapViewの背面レイヤ上のrenderInContextへの呼び出しのためのコードを再考する必要があります(失敗した場合、アプリケーションがクラッシュする可能性があります)。
    これらの呼び出しがメインスレッドをオフにして行われた場合、削除するかメインスレッドに移動する必要があります。


●メディアプレイヤ

  • iOS 6では、UIWebView内でビデオやオーディオを再生する場合、サウンドオン/オフスイッチによってオーディオがサイレントになっていないことを、オーディオセッションに正確に設定する必要があります。
    ネイティブクラスを使用して再生した時、この動作はビデオとオーディオで一致します。


●Passbook

  • strip.pngがパスバンドルに含まれていない場合、パスはbackgroud.pngにフォールバックしません。

  • PKPassLibraryDidChangeNotificationのためのuserInfo辞書の内容が、削除されたパスの場合には変更されています。
    新しいuserInfoの辞書を確認するために最新のドキュメントを参照してください。

  • パスはその署名内にWWDR中間証明書を含める必要があります。
    証明書が省略されたパスは無効で、Passbookに追加することができません。
    この制限は以前のベータリリースでは施行されていませんでした。

  • RGBを使用するパスに含まれる画像は、アルファチャンネルを含める必要があります。


●セキュリティ

  • iOS 5では、MD5署名での証明書の署名はサポートされていません。
    SHA1またはSHA2に基づいた署名アルゴリズムを使用して署名されていることを確認してください。

  • iOS 6では、カレンダー、リマインダー、連絡先、写真のためのプライバシーコントロールが改善されています。

    アプリケーションがこれらのデータ型にアクセスしようとした時、ユーザにアクセスダイアログを表示します。
    ユーザは『設定』> 『プライバシー』でアクセスのオン/オフを切り替えることができます。

    開発者は単発的なデータの各クラスのために"purpose"文字列を設定することができます。
    データが要求されている理由をユーザが理解できるように、iOSはこの文字列を表示します。
    これらの文字列はXcodeのプロジェクトエディタのInfoタブを使用して追加することができます。
    関連するキー名は『Privacy -』で始まる文字列です。

    この機能を使用して開発者を支援するために、Event KitとAddress Bookフレームワークに変更が加えられています。


●共有フォトストリーム

  • iOS 6 beta 1から新しいリリースに更新する時、共有フォトストリーム機能はOFFに設定されています。
    デフォルトの設定はONにする必要があります。


●シミュレータ

  • 写真、連絡先、カレンダー、リマインダーにアクセスするアプリケーションにおいて、iOS Simulatorではプライバシー警告は表示されません。

  • このリリースでは、iOS SimulatorはIn-App Purchaseのテストをサポートしていません。
    この機能を使用しているアプリケーションをテストするには、デバイスを使用してください。

  • シミュレータ上でMP3音声を再生を試みる時、音飛びする場合があります。


●ソーシャル



●ステータスバー

  • 現在アプリケーションのInfo.plistファイル内でステータスバーの色パラメータを設定できます。
    ステータスバーの色と、起動中のアプリケーションのナビゲーションバーの色との一致を確実にするために、これを行うことができます。
    ステータスバーの色を設定するには、Info.plistファイルにUIStatusBarTintParametersキーを追加します。
    このキーの値は、アプリケーション起動時のナビゲーションバーを記述する適切な値を持つ辞書です。
    辞書内では、これも辞書の値であるUINavigationBarキーにする必要があります。
    その辞書には(Styleキーで)初期ナビゲーションバーのスタイルが含まれており、(Translucentキーで)半透明であるかどうかを示します。
    また(TintColorキーで)色、もしくは(BackgroundImageキーで)カスタムの背景画像の名前で、ナビゲーションバーの色を指定することができます。


●UIKit

  • iOS 5.1では、UISplitViewControllerクラスが(以前はメールでのみ見られた)左ビューを表示する際のスライド表示スタイルを採用しています。
    このスタイルはデリゲートメソッドで提供された既存のバーボタンアイテム、または右ビュー内でのスワイプジェスチャのいずれかによって表示が開始された時に使用されます。
    追加APIの採用はこの動作を得るために必要ではなく、(デリゲートによって提供されているUIPopoverControllerのインスタンスを含む)全ての既存のAPIは以前のように引き続き動作します。
    アプリケーションでジェスチャを採用できない場合、ジェスチャを無効にするためにスプリットビューコントローラのpresentsWithGestureプロパティをNOに設定します。
    ただしジェスチャを無効にすると、全てのアプリケーションで一貫したユーザ体験を保持する使用法を妨げるため推奨しません。

  • iOS 6では、Gesture Recognizerでの一本指やシングルタップのメソッドの実装やデリゲートの設定は必要が無いような変更が導入されています。
    これはUIControlオブジェクトで上手く動作させることになります。

  • iOS 6以降では、UIWebViewクラスは非同期でコンテンツを描画します。

  • 自動回転はiOS 6で変更されています。
    iOS 6ではUIViewControllershouldAutorotateToInterfaceOrientation:メソッドは推奨されていません。
    そこではsupportedInterfaceOrientationsForWindow:shouldAutorotateメソッドを使用する必要があります。

    その他の責任はアプリケーションとアプリケーションデリゲートに移行されています。
    現在、(UINavigationControllerなどの)iOSのコンテナは自動回転するかどうかの決定に、その子を考慮に入れていません。
    デフォルトでは、アプリケーションとビューコントローラのサポートしているインターフェイスの向きは、iPadイディオムではUIInterfaceOrientationMaskAll、iPhoneイディオムではUIInterfaceOrientationMaskAllButUpsideDownに設定されています。

    アプリケーションがサポートするインターフェイスの向きは時間の経過とともに変更することができるのと同じく、ビューコントローラがサポートするインターフェイスの向きも時間の経過とともに変更することができます。
    デバイスが回転する度、またはビューコントローラがフルスクリーンのモーダルプレゼンテーションスタイルが表示する度に、システムはサポートされているインターフェイスの向きのために最上位のフルスクリーンのビューコントローラ(通常はルートビューコントローラ)を要求します。
    更に、このビューコントローラがshouldAutorotateメソッドからYESを返した場合のみ、サポートされている向きが取得されます。
    システムは、回転させるかどうかを判断するために(Info.plistファイル、またはアプリケーションデリゲートのapplication:supportedInterfaceOrientationsForWindow:メソッドによって決定されている)アプリケーションがサポートしている向きと、ビューコントローラがサポートしている向きを交差します。

    システムは最上位のフルスクリーンコントローラのsupportedInterfaceOrientationsメソッドによって返される値と、アプリケーションのsupportedInterfaceOrientationsForWindow:メソッドによって返される値を交差することによって、サポートされている向きかどうかを判断します。

    setStatusBarOrientation:animated:メソッドは完全に廃止されていません。
    現在は最上位のフルスクリーンビューコントローラのsupportedInterfaceOrientationsメソッドが0を返した場合のみ動作します。
    呼び出し側がステータスバーの向きが一致していることを保証する責任を負います。

  • willRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:、そしてdidRotateFromInterfaceOrientation:メソッドは、presentViewController:animated:completion:などで自身でフルスクリーンのプレゼンテーションを行うビューコントローラ上で呼び出されることはありません。

    アプリケーションがサブビューのレイアウト管理にこれらのメソッドを使用していないことを確認してください。
    代わりに、ビューコントローラのviewWillLayoutSubviewsメソッドを使用し、ビューの境界矩形を使用してレイアウトを調整する必要があります。

  • iOS 6では、UIViewControllerviewWillUnloadviewDidUnloadメソッドは非推奨になっています。
    データの解放にこれらのメソッドを使用していた場合、代わりにdidReceiveMemoryWarningメソッドを使用してください。
    また使用していなかった場合、ビューコントローラのビューへの参照を解放するために、このメソッドを使用することができます。
    これを行う前にビューがウィンドウに無いことをテストする必要があります。

  • attributedTextプロパティが有効な属性文字列を含んでいる場合、UILabelオブジェクトのshadowOffsetまたはshadowColorプロパティの値の設定はサポートされていません。
    代わりに、影を設定するための属性文字列のNSShadowAttributeName属性を使用してください。

  • 互換性の問題のため、NSBaselineOffsetAttributeName属性はiOS 6でサポートされていません。

  • NSTextAlignmentNatural値はサポートされていません。
    UILabeltextAlignmentプロパティで使用されている、またはNSStringdrawInRect:withFont:lineBreakMode:alignment:メソッドにalignmentパラメータとして与えられている時、例外が発生します。

  • UIViewsetContentStretch:は非推奨になりました。
    同じ効果を得るには、UIImageresizableImageWithCapInsets:メソッドを使用し、UIImageViewで画像を表示してください。

  • UIImageresizableImageWithCapInsets:メソッドはタイリングによって効果的にサイズ変更します。
    できるだけ効果的に実行するため、単一の列や行が伸縮されている時など、ユーザが違いを見分けることができない時はタイリングではなく伸縮を使用します。
    ただし特定の状況下では、ユーザが画像の一部を実際に伸縮したい場合があります。
    iOS 6では、resizableImageWithCapInsets:resizingMode:メソッドで呼び出し側がタイリングまたは伸縮のサイズ変更モードを指定することができます。

  • UICollectionViewLayoutクラスが変更されました。

    クラスは現在回転中に生成したアニメーションのカスタマイズをサポートします。
    挿入や削除のアニメーションをカスタマイズするためのメソッド名も変更されており、同じフックは挿入や削除のためだけでなく回転のために使用することができます。

    クラスはいくつかのメソッド名を変更しました。
    具体的には、デコレーションビューは『再使用識別子』によってではなく『要素の種類』によって参照されます。
    デコレーションビューを使用しているアプリケーションは、コードを修正し、これに対応するために再構築する必要があります。

  • UILabelのビューの下端は、現在ベースラインとは異なります。

    以前のAuto Layoutは、UILabelの下端とそのベースラインは同じとして解釈していました。
    多くの場合では便利ですが、あるラベルの上端に別の下端が配置された場合に問題が発生しました。
    このようなシナリオでは、下のラベルは上のラベルの重なることになり、上のラベルのディセンダが下のラベルのアセンダを壊す可能性がありました。
    現在のAuto Layoutは、(ラベルが本質的なコンテンツのサイズよりも大きくないと仮定した)テキストボックスの底としてUILayoutAttributeBottomが、テキストのベースラインとしてUILayoutAttributeBaselineが解釈されます。
    既に底や中心点に応じてラベルをレイアウトするためのコードを生成している場合には、テキストを周辺に少し移動し、その制約を調整する必要があります。

  • iOS 6 betaの以前のバージョンを使用して構築された、nibまたはストーリーボードにテーブルビューを持つアプリケーションは、beta 3以降でクリーンビルドする必要があります。

  • UIScrollView用のAuto Layoutのサポートに関して、いくつかの注意事項があります。

    一般的に、Auto Layoutはvisibleの端となるビューの上下左右の端を考慮します。
    つまり、そのスーパービューの左端にビューを固定する場合、実際にはスーパービューの境界の最小x値に固定します。
    スーパービューの境界の原点を変更しても、ビューの位置は変更されません。

    UIScrollViewクラスは境界の原点を変更することによって、そのコンテンツをスクロールします。
    Auto Layoutでこの作業を行うには、スクロールビューの上下左右の端が現在そのコンテンツビューの端を表すことになります。

    スクロールビューのサブビュー上の制約は、スクロールビューのコンテンツサイズとして解釈され、満たすためのサイズにする必要があります。
    (これはAuto Layoutで使用するintrinsicContentSizeメソッドと混同してはいけません。)
    Auto Layoutでのスクロールビューのframeのサイズに、制約はスクロールビューの幅と高さに関して明示的であるか、スクロールビューの端がそのサブツリーの外側のビューに接続する必要があります。

    スクロールビューのスーパービューなど、スクロールビューのサブツリーの外側のビューとビューの間に制約を作成することによって、他のスクロールするコンテンツ上に(スクロールしない)浮いたように見えるスクロールビューのサブビューを作成できることに注意してください。

    ここではスクロールビューを構成する方法のいくつかの例を示します。

    • 混合アプローチ:

      1. スクロールビューの外側に制約を持つスクロールビューの位置とサイズ、つまりtranslatesAutoresizingMaskIntoConstraintsプロパティがNOに設定されています。

      2. コンテンツを持たせたいサイズのスクロールビューのため、普通のUIViewのコンテンツビューを生成します。
        スクロールビューのサブビューを作成しますが、自動サイズ変更マスク変換の制約は継続させます。

        UIView *contentView = [[UIView alloc]
            initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
        [scrollView addSubview:contentView];
        // DON'T change contentView's translatesAutoresizingMaskIntoConstraints,
        // which defaults to YES;

      3. コンテンツビューのサイズに合わせてスクロールビューのコンテンツサイズを設定します。

        [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];

      4. コンテンツビューの内側に入れるビューを生成し、コンテンツビュー内でそれらを配置するように制約を設定します。

        あるいはまたスクロールビュー内に行くビューのサブツリーを作成し、制約を設定し、コンテンツビューやスクロールビューのcontentSizeプロパティで使用するサイズを見つけるために(UILayoutFittingCompressedSizeオプションで)systemLayoutSizeFittingSize:メソッドを呼び出すことができます。

    • 純粋なAuto Layoutのアプローチ:

      1. 関連する全てのビューでtranslatesAutoresizingMaskIntoConstraintsをNOに設定します。

      2. スクロールビューの外側に制約を持つスクロールビューの位置とサイズ。

      3. スクロールビュー内のサブビューのレイアウトに制約を使用するには、制約がスクロールビューの4つ全ての端と連携することと、それらのサイズを取得するためにスクロールビューに依存しないことを確認します。

        簡単な例では、画像のサイズから取得した固有のコンテンツサイズを持つ大きなイメージビューになります。
        ビューコントローラのviewDidLoadメソッドには、以下のようなコードが含まれます。

        UIScrollView *scrollView = [[UIScrollView alloc] init];
        UIImageView *imageView = [[UIImageView alloc] init];
        [imageView setImage:[UIImage imageNamed:"MyReallyBigImage"]];
        [self.view addSubview:scrollView];
        [scrollView addSubview:imageView];

        scrollView.translatesAutoresizingMaskIntoConstraints = NO;
        imageView.translatesAutoresizingMaskIntoConstraints = NO;

        NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];


        これは(デバイスの向きなどで)ビューコントローラのビューのサイズが変更され、イメージビューがスクロールするサブビューになるようなスクロールビューを与えます。
        スクロールビューのコンテンツサイズ設定する必要はありません。

  • ランドスケープ専用のアプリケーションで(Game Centerのログイン画面などの)ポートレート専用のビューコントローラを呼び出すと、アプリケーションがクラッシュします。

    回避策:

    1. アプリケーションはapplication:supportedInterfaceOrientationsForWindow:デリゲートメソッドの提供し、ポートレートが返されるマスク値の一つであることを保証する必要があります。

    2. UINavigationControllerを伴う場合、UINavigationControllerをサブクラス化しsupportedInterfaceOrientationsをオーバーライドします。


●WebKitとSafari

  • http://www.w3.org/TR/animation-timing/で説明されているように、iOSのWebKitは現在、JavaScriptでrequestAnimationFrameとcancelAnimationFrameメソッドをサポートしています。

    仕様はWorking Draft状態のままであり、これらのメソッドはwebkitの接頭辞を持っていて、window.webkitRequestAnimationFrameとwindow.webkitCancelAnimationFrameであることに注意してください。

  • デフォルトでアプリケーションのキャッシュ割り当ては5MBから25MBに増加しています。

  • JPEGのサブサンプリングの閾値は、iPhone 3GSとiPod touch(第4世代)を除く全てのサポートされているハードウェアで2MP(メガピクセル)から5MPに増加しています。

  • サポートにウェブフォームでの<input type="file">タグが追加されました。
    ユーザはフォトライブラリから既存の写真やビデオをアップロードしたり、カメラを使用して写真やビデオを撮ることができます。
    以前はこのフォームコントロールは常に無効になっていました。

  • OS XでのSafari 6.0では、現在iOSデバイスとiOS Simulator接続できるWeb Inspector(ウェブ開発ツール)を開発者が使用することができます。
    開発者はSafariとXcodeから構築し実行する独自のアプリ内のUIWebViewクラスでデバッグするために、Web Inspectorを使用することができます。
    これはSafariのDebug Consoleに置き換えられます。

  • iOS 6以降では、UIWebViewオブジェクトからウェブデータ(SQL Web StorageとLocalStorage)をバックアップするディレクトリに格納することができます。
    このデータをバックアップできるようにするには、アプリケーションのユーザデフォルトでWebKitStoreWebDataForBackupキーを設定します。
    アプリケーションが再読み込みできないウェブコンテンツデータに依存している場合のみ、これを行う必要があります。
    UIWebViewオブジェクトが任意のウェブコンテンツへのリンクを開く場合、このキーはNOに設定する必要があります。
    このキーの値をトグルすると、既存のウェブビューデータを保存しません。

  • iOS 6以降では、Safariは最早一般的なfeed: RSS/ATOMスキームを登録しません。
    これらのフィードの型を見ることができるアプリケーションは、URLスキーム用に登録することを勧めます。

  • WebKitは-webkit-transform: preserve-3dオプションを伴う要素のハードウェアアクセラレーションのレイヤを常に生成します。
    著者はハードウェアアクセラレーションを取得するための方法として、このオプションの使用を停止する必要があります。

  • iOS 6現在、http://www.youtube.com/watch?v=oHg5SJYRHA0形式で埋め込まれたYouTubeのURLは動作しません。
    これらのURLはYouTubeサイト上でビデオを見るためのもので、ウェブページ内に埋め込むためではありません。
    代わりに、https://developers.google.com/youtube/player_parametersで説明されている形式を使用する必要があります。

  • iOS 6では、keyboardDisplayRequiresUserActionプロパティはUIWebViewクラスに追加されています。
    プロパティはデフォルトではYESで、形式要素でfocus()を呼び出すとキーボードを表示しないことを意味します。
    プロパティをNOに変更することによって、JavaScriptが形式要素でforcus()を呼び出すと要素にフォーカスし、キーボードは自動的に表示されます。

  • iOS 6現在、ウェブアプリケーションで形式要素上でfocus()を呼び出すと要素を割り当てます。



参考文献

Apple/iOS SDK Release Notes for iOS 6

0 CommentsPosted in 資料

UIViewControllerクラス

2013. 06. 01
・継承
UIResponderNSObject

・準拠
NSCoding
UIAppearanceContainer
NSObject (NSObject)

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

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

・宣言
UINavigationController.h
UIPopoverController.h
UISplitViewController.h
UITabBarController.h
UIViewController.h

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



●概要

UIViewControllerクラスは、全てのiOSアプリケーションの基本的なビュー管理モデルを提供します。
UIViewControllerオブジェクトを直接インスタンス化することは稀です。
代わりに、各サブクラスが実行する特定のタスクに基づいて、UIViewControllerクラスのサブクラスをインスタンス化します。
ビューコントローラは、アプリケーションのユーザインターフェイス部分を構成するビューのセットを管理します。
アプリケーションのコントロール層の一部として、ビューコントローラはモデルオブジェクトと(他のビューコントローラを含む)他のコントローラオブジェクトとの作用を調整し、アプリケーションに単一の一貫したユーザインターフェイスを提供します。

必要に応じて、ビューコントローラは以下のことを行います。
  • ビューのサイズ変更とレイアウト
  • ビューのコンテンツの調整
  • ユーザがビューと対話する時に、ビューに代わって実行
ビューコントローラはビューを厳密に管理し、イベントを処理するために使用されるレスポンダチェーンに参加します。
ビューコントローラはUIResponderクラスの子孫であり、管理ルートビューと(通常は別のビューコントローラに属する)そのスーパービュー間にレスポンダチェーンを挿入します。
ビューコントローラのビューがイベントを処理しない場合、ビューコントローラはイベントを処理するためのオプションを持っているか、スーパービューへイベントを渡すことができます。

ビューコントローラを単独で使用することは稀です。
代わりに、複数のビューコントローラを使用し、アプリケーションのユーザインターフェイスの一部をそれぞれ所有させます。
例えば、あるビューコントローラは項目のテーブルを管理し、別のビューコントローラがテーブルから選択された項目の表示を管理するという場合があります。
各ビューコントローラは、責任を持っているコンテンツを表示するために、所有するビューを表示します。


サブクラス化の注意

アプリケーションにはUIViewControllerのカスタムサブクラスが少なくとも一つ含まれており、多くの場合はいくつかあります。
これらのカスタムサブクラスは、ビューとユーザの対話を処理する方法など、アプリケーション固有の動作を定義します。
以下の項でカスタムサブクラスが実行するいくつかのタスクの簡単な概要を提供します。
カスタムサブクラスの実装についての詳細は、『iOS View Controllerプログラミングガイド』を参照してください。


ビューの管理

新しいUIViewControllerのサブクラスを定義する場合、コントローラが管理するビューを指定する必要があります。
典型的なビュー階層は(このクラスのviewプロパティで利用できるように参照している)柔軟な境界を持つビューと、実際のコンテンツを提供する一つ以上のサブビューで構成されています。
ルートビューのサイズと位置は、通常ビューコントローラを所有し、そのコンテンツを表示する別のオブジェクトによって決定されます。
ビューコントローラは、所有するオブジェクトによってルートビューに指定されたサイズに基づいて、所有している任意のサブビューの位置を決定します。
ビューコントローラは通常、ウィンドウまたは別のビューコントローラによって所有されています。
ビューコントローラがウィンドウオブジェクトによって所有されている場合、ウィンドウのルートビューコントローラとして機能します。
ビューコントローラのルートビューはウィンドウのサブビューとして追加され、ウィンドウを満たすようにサイズ変更されます。
ビューコントローラが別のビューコントローラによって所有されている場合、親ビューコントローラがいつ、どのように子ビューコントローラのコンテンツが表示されるかを決定します。

UIViewControllerクラスは、必要な時にビューコントローラのビューを読み込むための組み込みサポートを提供しています。
特にviewプロパティがアクセスした時は、ビューが自動的に読み込まれます。
アプリケーションでビューを読み込みを実装するには、いくつかの方法があります。
  • Interface Builderで生成したビューを、ストーリーボードを使用してビューコントローラに指定することができます。
    ストーリーボードには事前に構成されたビューコントローラとそれに関連付けされたビューが含まれており、アプリケーションのユーザインターフェイスを開発するための望ましい方法です。
    ストーリーボードの重要な利点は、アプリケーションの別のビューコントローラ間との関係を表現することができることです。
    例えば、あるビューコントローラのコンテンツが内部に別のビューコントローラを含んでいる、あるいはビューコントローラが別のビューコントローラから(セグエとして知られる)遷移として表示されていると指定することができます。
    ビューコントローラ間の関係を見れるようにすることで、ストーリーボードはアプリケーションの動作を一目見て容易に理解できます。

    実行時、ビューコントローラはビューを自動的にインスタンス化と設定するためにストーリーボードを使用します。
    多くの場合、ビューコントローラ自身はストーリーボードで定義されたセグエによって自動的に生成されます。
    ストーリーボードを使用してビューコントローラのコンテンツを定義する時は、ビューコントローラオブジェクトの割り当てや初期化を直接行わないでください。
    代わりに、ビューコントローラをプログラムでインスタンス化する必要がある時は、UIStoryboardオブジェクト上でinstantiateViewControllerWithIdentifier:メソッドを呼び出すことによって行ってください。

  • またInterface Builderで生成したnibファイルを使用して、ビューコントローラのビューを指定することができます。
    ストーリーボードと同様に、nibファイルでビューのセットを生成し構成することができます。
    ただし、ストーリーボードを使用する際にできるような、nibファイルを使用してビューコントローラ間の関係を容易に生成または表示することはできません。

    nibファイルを使用してビューコントローラオブジェクトを初期化するには、ビューコントローラによって使用されているnibファイルを指定するinitWithNibName:bundle:メソッドを使用します。
    その後、ビューコントローラがビューを読み込む必要がある場合は、nibファイルに格納されている情報を使用して、ビューを自動的に生成し構成します。

  • ストーリーボードやnibファイルでビューを定義することができない場合、手動でビュー階層をインスタンス化するためにloadViewメソッドをオーバーライドし、viewプロパティに割り当てます。
これらの技術の全ては、ビューの適切なセットを生成し、viewプロパティを介して表示されます。

重要:ビューコントローラは、ビューとそれらが生成する全てのサブビューの唯一の所有者です。
それらのビューを生成し、ビューコントローラ自身が解放された場合などの適切な時に所有権を放棄する責任があります。
ビューオブジェクトを格納するためにストーリーボードやnibファイルを使用する場合、ビューコントローラがそれらを要求した時に各ビューコントローラオブジェクトは自動的にビューの独自のコピーを取得します。
ただしビューを手動で生成する場合、複数のビューコントローラで同じビューオブジェクトを使用しないでください。

ビュー階層のビューを生成する時、常にビューの自動サイズ変更プロパティを設定する必要があります。
ビューコントローラが画面を表示する時、ルートビューは通常、ウィンドウの現在の向きやステータスバーなど他のインターフェイス要素の存在に依存して変化し得る利用可能な空間に合わせてサイズ変更します。
Interface BuilderのInspectorウィンドウを使用して、あるいは各ビューのautoresizesSubviewsautoresizingMaskのプロパティを変更することにより、自動サイズ変更プロパティを設定することができます。
ビューコントローラがポートレートとランドスケープの両方の向きをサポートする場合、これらのプロパティの設定は重要です。
向きを変更する際、システムは現在の向きに一致するように自動的にビューを再配置およびサイズ変更するために、これらのプロパティを使用します。
ビューコントローラがAuto Layoutをサポートし、他のビューコントローラの子である場合、これらの制約を無効にするためにビューのsetTranslatesAutoresizingMaskIntoConstraints:メソッドを呼び出す必要があります。


メモリ管理

メモリはiOSの重要なリソースであり、ビューコントローラは危機的な時にメモリのフットプリントを削減する組み込みサポートを提供しています。
UIViewControllerクラスは、不要なメモリを解放するためにdidReceiveMemoryWarningメソッドを介して、低メモリ状態での自動処理をいくつか提供します。

iOS 6より前では、低メモリの警告が発生した場合、後で再読み込みや再生成できると知っている時はUIViewControllerクラスがビューを破棄していました。
これが発生した場合、nibファイルから読み込まれたオブジェクトを含め、viewDidLoadメソッドで生成されたオブジェクトや、実行時に遅延生成されビュー階層に追加されたオブジェクトといった、ビュー階層で関連付けされている全てのオブジェクトの所有権を放棄する機会を与えるために、コードでviewWillUnloadviewDidUnloadメソッドを呼び出します。
iOS 6では、ビューは破棄されることは無く、これらのメソッドは呼び出されません。
メモリが低下した時に、ビューコントローラが特定のタスクを実行する必要がある場合は、didReceiveMemoryWarningメソッドをオーバーライドする必要があります。


ビューの回転の処理

iOS 6では、アプリケーションのInfo.plistファイルで定義されたインターフェイスの向きをサポートします。
ビューコントローラはサポートされている向きのリストを制限するsupportedInterfaceOrientationsメソッドをオーバーライドすることができます。
一般的に、システムはウィンドウのルートビューコントローラ、または画面全体を満たすために表示されるビューコントローラ上でのみ、このメソッドを呼び出します。
子ビューコントローラは親ビューコントローラによって提供されたウィンドウの一部を使用していますが、回転がサポートされているかについての決定に直接関与はしません。
アプリケーションの向きのマスクとビューコントローラの向きのマスクの交差は、ビューコントローラが回転させることができる向きを決定するために使用されます。

特定の向きでフルスクリーンを表示することを意図している場合、ビューコントローラのpreferredInterfaceOrientationForPresentationをオーバーライドすることができます。

iOS 5以前では、UIViewControllerクラスはポートレートモードのビューのみを表示します。
追加の向きをサポートするには、shouldAutorotateToInterfaceOrientation:メソッドをオーバーライドし、サブクラスがサポートする全ての向きでYESを返す必要があります。
ビューの自動サイズ変更プロパティが正確に設定されている場合、全てについて行う必要がある可能性があります。
ただし、UIViewControllerクラスは必要に応じて追加の動作を実装するために、追加のフックが提供されています。
一般的に、ビューコントローラが子ビューコントローラとして使用されることを意図している場合、全てのインターフェイスの向きをサポートする必要があります。

可視のビューコントローラで回転が発生した場合、willRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:、そしてdidRotateFromInterfaceOrientation:メソッドが回転中に呼び出されます。
親によってビューがサイズ変更や位置決めされた後にはviewWillLayoutSubviewsメソッドも呼び出されます。
ビューコントローラが可視でない場合に向きの変更が発生すると、回転メソッドは呼び出されません。
ただし、ビューが可視になる時にviewWillLayoutSubviewsメソッドが呼び出されます。
このメソッドの実装では、デバイスの向きを決定するためにstatusBarOrientationメソッドを呼び出すことができます。

:起動時にアプリケーションはポートレートの向きでインターフェイスを設定する必要があります。
application:didFinishLaunchingWithOptions:メソッドが戻った後、アプリケーションはウィンドウを表示する前に適切な向きにビューを回転させるためにビューコントローラの回転機構を使用します。


ビューのイベント通知

UIViewControllerクラスは、ビューコントローラのビューがウィンドウのビュー階層から追加や削除された時、またはサイズ変更された時など、多くの通知に応答します。
UIViewControllerクラスは、これらのイベントが発生した時に呼び出される特定のメソッドを提供します。
サブクラスは特定の動作を実装するために、これらのメソッドをオーバーライドすることができます。


コンテナビューコントローラの実装

カスタムのUIViewControllerサブクラスも、コンテナビューコントローラとして機能することができます。
コンテナビューコントローラは、子ビューコントローラとして知られている、所有している他のビューコントローラのコンテンツの表示を管理します。
子のビューはそのままで、あるいはコンテナビューコントローラによって所有されているビューと組み合わせて表示することができます。

コンテナビューコントローラのサブクラスは、子を関連付けるためのパブリックインターフェイスを宣言する必要があります。
これらのメソッドの性質は貴方次第であり、貴方が生成しているコンテナのセマンティクスに依存します。
ビューコントローラによって一度に表示ことができる子の数や、それらの子がいつ表示されるか、そしてビューコントローラのビュー階層に現れる場所を決定する必要があります。
ビューコントローラクラスは関係があれば、子によって共有されているかを定義します。
コンテナの完全なパブリックインターフェイスを確立することによって、どのようにコンテナが動作を実装しているかについて、多くのプライベートな細部にアクセスすること無く、子は論理的にその機能を使用していることを保証します。

コンテナビューコントローラは、ビュー階層に子のルートビューを追加する前に、自身と子ビューコントローラを関連付けする必要があります。
これにより、iOSが子ビューコントローラとそれらのコントローラが管理するビューにイベントを適切に送ることができます。
同様に、ビュー階層から子のルートビューを削除した後、自身から子ビューコントローラを切断する必要があります。
それらの連携を作成または破壊するには、コンテナが基底クラスによって定義されている特定のメソッドを呼び出します。
これらのメソッドはコンテナクラスのクライアントによって呼び出されることを意図しておらず、期待されているコンテナ動作を提供するために、コンテナの実装によってのみ使用されるべきです。

呼び出す必要のある必須メソッドは以下の通りです。

addChildViewController:
removeFromParentViewController
willMoveToParentViewController:
didMoveToParentViewController:

:コンテナビューコントローラを生成する時に、全てのメソッドをオーバーライドする必要はありません。
デフォルトでは、回転と外観のコールバックは自動的に子に転送されます。
この動作を自身で制御するには、shouldAutomaticallyForwardRotationMethodsshouldAutomaticallyForwardAppearanceMethodsメソッドを必要に応じてオーバーライドすることができます。



●タスク

●Nibファイルを使ったビューコントローラの生成

– initWithNibName:bundle:
  nibName    プロパティ
  nibBundle    プロパティ

●ストーリーボードの使用

– shouldPerformSegueWithIdentifier:sender:
– performSegueWithIdentifier:sender:
– prepareForSegue:sender:
   storyboard    プロパティ
– canPerformUnwindSegueAction:fromViewController:withSender:

●ビューの管理

  view    プロパティ
– isViewLoaded
– loadView
– viewDidLoad
  title    プロパティ
– viewDidUnload    iOS 6.0では非推奨
– viewWillUnload    iOS 6.0では非推奨

●メモリ警告の処理

– didReceiveMemoryWarning

●ビューイベントへの応答

– viewWillAppear:
– viewDidAppear:
– viewWillDisappear:
– viewDidDisappear:
– viewWillLayoutSubviews
– viewDidLayoutSubviews

●ビュー遷移の特定の種類のテスト

– isMovingFromParentViewController
– isMovingToParentViewController
– isBeingPresented
– isBeingDismissed

●ビューのレイアウト動作の構成

– updateViewConstraints
  wantsFullScreenLayout    プロパティ

●ビュー回転設定の構成

– shouldAutorotate
– supportedInterfaceOrientations
– preferredInterfaceOrientationForPresentation
  interfaceOrientation    プロパティ
+ attemptRotationToDeviceOrientation
– rotatingHeaderView
– rotatingFooterView
– shouldAutorotateToInterfaceOrientation:    iOS 6.0では非推奨

●ビュー回転イベントへの応答

– willRotateToInterfaceOrientation:duration:
– willAnimateRotationToInterfaceOrientation:duration:
– didRotateFromInterfaceOrientation:
– didAnimateFirstHalfOfRotationToInterfaceOrientation:    iOS 5.0では非推奨
– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:    iOS 5.0では非推奨
– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:    iOS 5.0では非推奨

●コンテナイベントへの応答

– willMoveToParentViewController:
– didMoveToParentViewController:

●ビューコントローラへの編集動作の追加

  editing    プロパティ
– setEditing:animated:

●状態復元の管理

  restorationIdentifier    プロパティ
  restorationClass    プロパティ
– encodeRestorableStateWithCoder:
– decodeRestorableStateWithCoder:

●別のビューコントローラのコンテンツの表示

– presentViewController:animated:completion:
– dismissViewControllerAnimated:completion:
  modalTransitionStyle    プロパティ
  modalPresentationStyle    プロパティ
  definesPresentationContext    プロパティ
  providesPresentationContextTransitionStyle    プロパティ
– disablesAutomaticKeyboardDismissal
– dismissModalViewControllerAnimated:    iOS 6.0では非推奨
– presentModalViewController:animated:    iOS 6.0では非推奨

●その他の関連ビューコントローラの取得

  presentingViewController    プロパティ
  presentedViewController    プロパティ
  parentViewController    プロパティ
  navigationController    プロパティ
  splitViewController    プロパティ
  tabBarController    プロパティ
  searchDisplayController    プロパティ
  modalViewController    プロパティ    iOS 6.0では非推奨

●カスタムコンテナの子ビューコントローラの管理

  childViewControllers    プロパティ
– addChildViewController:
– removeFromParentViewController
– shouldAutomaticallyForwardRotationMethods
– shouldAutomaticallyForwardAppearanceMethods
– transitionFromViewController:toViewController:duration:options:animations:completion:
– beginAppearanceTransition:animated:
– endAppearanceTransition
– viewControllerForUnwindSegueAction:fromViewController:withSender:
– segueForUnwindingToViewController:fromViewController:identifier:
– automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers    iOS 6.0では非推奨

●ナビゲーションインターフェイスの構成

  navigationItem    プロパティ
– editButtonItem
  hidesBottomBarWhenPushed    プロパティ
– setToolbarItems:animated:
  toolbarItems    プロパティ

●タブバーアイテムの構成

  tabBarItem    プロパティ

●ポップオーバーコントローラの表示の構成

  contentSizeForViewInPopover    プロパティ
  modalInPopover    プロパティ



●プロパティ

interfaceOrientation

インターフェイスの現在の向きを示します。(読み込みのみ)

@property(nonatomic, readonly) UIInterfaceOrientation interfaceOrientation

解説
有効な値はUIInterfaceOrientationで説明します。

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

宣言
UIViewController.h


modalTransitionStyle

レシーバを表示する時に使用する遷移スタイルです。

@property(nonatomic, assign) UIModalTransitionStyle modalTransitionStyle

解説
このプロパティは、presentViewController:animated:completion:メソッドを使用して表示された時に、ビューコントローラの画面上でアニメーションする方法を決定します。
遷移の種類を変更するには、ビューコントローラを表示する前にこのプロパティを設定する必要があります。
このプロパティのデフォルト値はUIModalTransitionStyleCoverVerticalです。

遷移スタイルの有効なリストと、利用可能な表示スタイルとの互換性については、定数『遷移スタイルの表示』の説明を参照してください。

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

宣言
UIViewController.h


navigationController

ビューコントローラ階層内で最も近い祖先のナビゲーションコントローラです。(読み込みのみ)

@property(nonatomic, readonly, retain) UINavigationController*navigationController

解説
レシーバまたは祖先の一つがナビゲーションコントローラの子である場合、このプロパティは所有しているナビゲーションコントローラを含みます。
ビューコントローラがナビゲーションコントローラの内部に組み込まれていない場合、このプロパティはnilです。

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

宣言
UINavigationController.h


navigationItem

親のナビゲーションバーのビューコントローラを表示するために使用される、ナビゲーションアイテムです。(読み込みのみ)

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

解説
これはナビゲーションコントローラでプッシュされた時に、ビューコントローラが表示するために生成する、UINavigationItemの唯一のインスタンスです。
プロパティが最初にアクセスした時に、UINavigationItemオブジェクトが生成されます。
したがって、ビューコントローラの表示にナビゲーションコントローラを使用しない場合は、このプロパティにアクセスしてはいけません。
ナビゲーションアイテムが構成されていることを確実にするには、このプロパティをオーバーライドして最初にアクセスした時にバーボタンアイテムを生成するコードを追加するか、ビューコントローラの初期化コードでアイテムを生成します。

ビューコントローラのビューの生成に、ナビゲーションアイテムのバーボタンアイテムの生成を関連付けすることは避けてください。
ビューコントローラのナビゲーションアイテムは、ビューコントローラのビューとは独立して取得できます。
例えばナビゲーションスタックに二つのビューコントローラをプッシュした場合、最上位のビューコントローラは可視になりますが、他のビューコントローラのナビゲーションアイテムはバックボタンを表示するために取得することができます。

デフォルトの動作では、ビューコントローラのタイトルを表示するナビゲーションアイテムを生成します。

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

宣言
UINavigationController.h


title

このコントローラが管理するビューを表すローカライズした文字列です。

@property(nonatomic, copy) NSString *title

解説
サブクラスはユーザにビューを表す人が読める文字列のタイトルを設定する必要があります。

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

宣言
UIViewController.h


view

コントローラが管理するビューです。

@property(nonatomic, retain) UIView *view

解説
このプロパティに格納されているビューは、ビューコントローラのビュー階層のルートビューを表します。
このプロパティのデフォルト値はnilです。

このプロパティにアクセスし、その値が現在nilの場合、ビューコントローラは自動的にloadViewメソッドを呼び出し、その結果のビューを返します。

各ビューコントローラオブジェクトは、そのビューの唯一の所有者です。
複数のビューコントローラオブジェクトと同じビューオブジェクトを関連付けすることはできません。
この規則の唯一の例外は、コンテナビューコントローラが自身のビュー階層内のサブビューとしてこのビューを追加する場合です。
サブビューを追加する前に、コンテナは二つのビューコントローラオブジェクト間の親子関係を生成するために、addChildViewController:メソッドを最初に呼び出す必要があります。

このプロパティにアクセスするとビューが自動的に読み込まれる可能性があるため、ビューが現在メモリ内にあるかどうかを判断するisViewLoadedメソッドを使用することができます。
このプロパティとは異なり、現在メモリ内に存在しない場合でも、isViewLoadedプロパティはビューの読み込みを強制しません。

UIViewControllerクラスは、低メモリ状態の期間やビューコントローラ自身が最終的に解放された時に、このプロパティを自動的にnilに設定することができます。

ビューコントローラがどのようにビューの読み込みや破棄を行うかについての詳細は、『iOS View Controllerプログラミングガイド』のp.60『View Controllerにおけるリソース管理』を参照してください。

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

宣言
UIViewController.h



●クラスメソッド



●インスタンスメソッド

didReceiveMemoryWarning

アプリケーションがメモリ警告を受け取った時に、ビューコントローラに送信します。

- (void)didReceiveMemoryWarning

解説
アプリケーションが、このメソッドを直接呼び出すことはありません。
代わりに、システムが利用可能なメモリ量が低下していると判断した時に、このメソッドは呼び出されます。

ビューコントローラによって使用される追加のメモリを解放するために、このメソッドをオーバーライドすることができます。
その場合、このメソッドの実装ではいくつかの時点でsuperを呼び出す必要があります。

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

宣言
UIViewController.h


dismissModalViewControllerAnimated:

レシーバによって表示されたビューコントローラを閉じます。
(iOS 6.0では非推奨。代わりにdismissViewControllerAnimated:completion:を使用してください。)

- (void)dismissModalViewControllerAnimated:(BOOL)animated

パラメータ
animated
YESの場合、このメソッドはビューを閉じる際にアニメーションし、それ以外の場合はアニメーションしません。
アニメーションのスタイルは、閉じるビューコントローラのmodalTransitionStyleプロパティの値によって決定されます。

解説
表示するビューコントローラは、表示したビューコントローラを閉じる責任があります。
表示されたビューコントローラ自身でこのメソッドを呼び出す場合は、表示するビューコントローラに自動的にメッセージを転送します。

連続でいくつかのビューコントローラを表示し、表示されたビューコントローラのスタックを構築する場合、スタックの下位のビューコントローラ上でこのメソッドを呼び出すと、直接の子ビューコントローラとスタック上の子より上の全てのビューコントローラを閉じます。
これが発生すると、唯一の最上位のビューはアニメーション化されて閉じられ、全ての中間のビューコントローラは単にスタックから削除されます。
最上位のビューはモーダル遷移スタイルを使用して閉じられ、スタック内の下位にある他のビューコントローラによって使用されたものと異なる場合があります。

レシーバの表示されたビューコントローラへの参照を保持したい場合は、このメソッドを呼び出す前にmodalViewControllerプロパティで値を取得してください。

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

宣言
UIViewController.h


initWithNibName:bundle:

指定されたバンドル内のnibファイルで新たに初期化されたビューコントローラを返します。

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

パラメータ
nibName
ビューコントローラに関連付けられるnibファイル名です。
nibファイル名は先頭にパス情報を含めてはいけません。
nilを指定した場合、nibNameプロパティはnilに設定されます。
nibBundle
nibファイルを検索するためのバンドルを指定します。
このメソッドは、最初にバンドルの言語固有のプロジェクトディレクトリ内のnibファイルを、次にResourcesディレクトリを検索します。
nilの場合、このメソッドはメインバンドル内のnibファイルを検索します。

戻り値
新しく初期化されたUIViewControllerオブジェクトです。

解説
これはこのクラスの指定イニシャライザです。

指定したnibファイルはすぐには読み込まれません。
ビューコントローラのビューが最初にアクセスした時に読み込まれます。
nibファイルを読み込んだ後で追加の初期化を実行したい場合は、viewDidLoadメソッドをオーバーライドし、そこで貴方のタスクを実行します。

nibNameパラメータにnilを指定してloadViewメソッドをオーバーライドしない場合、ビューコントローラは他の手段を使用してnibファイルを検索します。
nibNameを参照してください。

アプリケーションがビューコントローラとそれに関連するビューの定義にストーリーボードを使用している場合、アプリケーションがそのクラスのオブジェクトを直接初期化することはありません。
代わりにビューコントローラは、セグエがトリガーされた時はiOSによって自動的に、またはアプリケーションがストーリーボードオブジェクトのinstantiateViewControllerWithIdentifier:メソッドを呼び出した時はプログラムで、ストーリーボードによってインスタンス化されます。
ストーリーボードからビューコントローラをインスタンス化する時、iOSは代わりにinitWithCoder:メソッドを呼び出すことによって新しいビューコントローラを初期化します。
iOSはストーリーボード内に格納されているnibファイルに、nibNameプロパティを自動的に設定します。

ビューコントローラがビューを読み込む方法についての詳細は、『iOS View Controllerプログラミングガイド』のp.60『View Controllerにおけるリソース管理』を参照してください。

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

宣言
UIViewController.h


loadView

コントローラが管理するビューを生成します。

- (void)loadView

解説
このメソッドを直接呼び出さないでください。
ビューコントローラはviewプロパティが要求された時にこのメソッドを呼び出しますが、現在はnilになっています。
このメソッドはビューを読み込む、または生成し、viewプロパティに割り当てます。

ビューコントローラが関連付けされたnibファイルを持っている場合、このメソッドはnibファイルからビューを読み込みます。
nibNameプロパティがnil以外の値を返した場合や、ビューコントローラがストーリーボードからインスタンス化された場合、initWithNibName:bundle:メソッドを使用して明示的にnibファイルを割り当てた場合、またはiOSがビューコントローラのクラス名に基づいた名前を持つアプリケーションバンドル内でnibファイルを見つけた場合、ビューコントローラは関連付けされたnibファイルを持っています。
ビューコントローラが関連付けされたnibファイルを持っていない場合、このメソッドは代わりにプレーンのUIViewオブジェクトを生成します。

ビューの生成とビューコントローラの初期化にInterface Builderを使用する場合、このメソッドをオーバーライドしてはいけません。

手動でビューを生成するために、このメソッドをオーバーライドすることができます。
この方法を選択した場合、viewプロパティにビュー階層のルートビューを割り当てます。
生成したビューは唯一のインスタンスである必要があり、他の全てのビューコントローラオブジェクトと共有してはいけません。
このメソッドのカスタム実装でsuperを呼び出してはいけません。

ビューに追加の初期化を実行したい場合は、viewDidLoadメソッドで行ってください。

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

宣言
UIViewController.h


presentModalViewController:animated:

ユーザに指定されたビューコントローラによって管理されるモーダルビューを表示します。
(iOS 6.0では非推奨。代わりにpresentViewController:animated:completion:メソッドを使用してください。)

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

パラメータ
modalViewController
モーダルビューを管理するビューコントローラを指定します。
animated
YESの場合はビューを表示する際にアニメーションし、それ以外の場合はアニメーションしません。

解説
iPhoneやiPod touchデバイス上では、modalViewControllerのビューは常にフルスクリーンで表示されます。
iPadでは、modalPresentationStyleプロパティの値に依存して表示されます。

指定されたビューコントローラにmodalViewControllerプロパティを設定します。
そのビューをサイズ変更し、ビュー階層へアタッチします。

ビューは、modalViewControllerパラメータにコントローラのmodalTransitionStyleプロパティで指定された遷移スタイルに合わせてアニメーション化されます。

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

宣言
UIViewController.h


shouldAutorotateToInterfaceOrientation:

ビューコントローラが指定された向きをサポートするかどうかを示すブール値を返します。
(iOS 6.0では非推奨。代わりにsupportedInterfaceOrientationspreferredInterfaceOrientationForPresentationをオーバーライドしてください。)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

パラメータ
interfaceOrientation
回転後のアプリケーションのユーザインターフェイスの向きを指定します。
有効な値はUIInterfaceOrientationで説明されています。

戻り値
ビューコントローラがビューを指定された向きに自動回転させる場合はYES、そうでない場合はNOを返します。

解説
デフォルトでは、このメソッドはUIInterfaceOrientationPortraitの向きでのみYESを返します。
ビューコントローラに追加の向きをサポートさせる場合は、サポートする全ての向きでYESを返すように、このメソッドをオーバーライドしてください。

このメソッドの実装は、interfaceOrientationパラメータの値に基づいて、単にYESまたはNOを返すだけです。
interfaceOrientationプロパティの値を取得したり、UIDeviceクラスによって向きの値を報告させてチェックしたりしないでください。
ビューコントローラは指定された向きをサポートできるか否かのいずれかです。

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

宣言
UIViewController.h


viewDidAppear:

ビュー階層にビューが追加されたことを、ビューコントローラに通知します。

- (void)viewDidAppear:(BOOL)animated

パラメータ
animated
YESの場合、ウィンドウにビューを追加する際にアニメーションを使います。

解説
ビューの表示に関連付けされている追加のタスクを実行するために、このメソッドをオーバーライドすることができます。
このメソッドをオーバーライドする場合、実装の中のいくつかの点でsuperを呼び出す必要があります。

:ビューコントローラがポップオーバーの内部のビューコントローラによって表示されている場合、表示したコントローラが閉じられた後に、このメソッドを表示するビューコントローラ上で呼び出すことはできません。

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

宣言
UIViewController.h


viewDidDisappear:

ビュー階層からビューが削除されたことを、ビューコントローラに通知します。

- (void)viewDidDisappear:(BOOL)animated

パラメータ
animated
YESの場合、ビューを破棄した際にアニメーションを行います。

解説
破棄または非表示するビューに関連付けされている追加のタスクを実行するために、このメソッドをオーバーライドすることができます。
このメソッドをオーバーライドする場合、実装の中のいくつかの点でsuperを呼び出す必要があります。

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

宣言
UIViewController.h


viewDidLoad

コントローラのビューがメモリに読み込まれた後に呼び出されます。

- (void)viewDidLoad

解説
このメソッドは、ビューコントローラがメモリ内にビュー階層を読み込んだ後に呼び出されます。
このメソッドは、ビュー階層がnibファイルから読み込まれた、またはloadViewメソッドでプログラムによって生成されるたかどうかに関係なく呼び出されます。
通常、nibファイルから読み込まれたビューに追加の初期化を実行するために、このメソッドをオーバーライドします。

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

宣言
UIViewController.h


viewDidUnload

コントローラのビューがメモリから解放された時に呼び出されます。
(iOS 6.0では非推奨。ビューはもはや低メモリ状態下では破棄されないので、このメソッドが呼び出されることはありません。)

- (void)viewDidUnload

解説
低メモリ状態が発生し、現在のビューコントローラのビューが必要でない場合、システムはメモリからそれらのビューの削除を選ぶことができます。
このメソッドはビューコントローラのビューが解放された後に呼び出され、最終的なクリーンアップを実行する機会となります。
ビューコントローラがビューやサブビューに別の参照を格納している場合、それらの参照を解放するためにこのメソッドを使用する必要があります。
またビューをサポートするために生成したが、そのビューが現在無く最早必要でなくなった任意のオブジェクトへの参照を削除するために、このメソッドを使用することができます。
ユーザデータの解放や容易に再生成することができない他の情報の解放に、このメソッドを使用するべきではありません。

このメソッドが呼び出された時、viewプロパティはnilになります。

利用可能
iOS 3.0以降で利用可能
iOS 6.0で非推奨

宣言
UIViewController.h


viewWillAppear:

ビューがビュー階層に追加されようとしていることを、ビューコントローラに通知します。

- (void)viewWillAppear:(BOOL)animated

パラメータ
animated
YESの場合、ウィンドウにビューを追加する際にアニメーションを使います。

解説
このメソッドは、レシーバのビューがビュー階層に追加されようとする前に呼び出され、アニメーションはビューを表示するために構成されています。
ビューの表示に関連付けされているカスタムのタスクを実行するために、このメソッドをオーバーライドすることができます。
例えば、表示されているビューの向きやスタイルに合わせて調整するために、ステータスバーの向きやスタイルを変更するには、このメソッドを使用することができます。
このメソッドをオーバーライドする場合、実装の中のいくつかの点でsuperを呼び出す必要があります。

ビューコントローラによってビューがビュー階層に追加される方法や、発生する一連のメッセージについての詳細は『iOS View Controller プログラミングガイド』のp.71『表示関連の通知への応答』を参照してください。

:ビューコントローラがポップオーバーの内部のビューコントローラによって表示されている場合、表示したコントローラが閉じられた後に、このメソッドを表示するビューコントローラ上で呼び出すことはできません。

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

宣言
UIViewController.h


viewWillDisappear:

ビュー階層からビューが削除されようとしていることを、ビューコントローラに通知します。

- (void)viewWillDisappear:(BOOL)animated

パラメータ
animated
YESの場合、ビューを破棄する際にアニメーションが始まります。

解説
このメソッドは、ビュー階層からビューが削除されることに応答して呼び出されます。
このメソッドはビューが実際に削除される前、およびアニメーションが構成される前に呼び出されます。

サブクラスはこのメソッドをオーバーライドして変更の編集を送信するために使用することができ、ビューのファーストレスポンダの破棄や、他の関連するタスクを実行します。
例えば、ビューがファーストレスポンダで、viewDidDisappear:メソッドで作成されたステータスバーの向きやスタイルの変更を元に戻すには、このメソッドを使用することができます。
このメソッドをオーバーライドする場合、実装の中のいくつかの点でsuperを呼び出す必要があります。

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

宣言
UIViewController.h


willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:

ユーザインターフェイスの回転の前半の前に、ビューコントローラに送信されます。
(iOS 5.0では非推奨。代わりに一行程で回転する技術を使用してください。
willAnimateRotationToInterfaceOrientation:duration:メソッドを参照してください。)

- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

パラメータ
toInterfaceOrientation
回転する前のアプリケーションのユーザインターフェイスの向きの状態を指定します。
有効な値はUIInterfaceOrientationで説明しています。
duration
回転を保留する前半の期間を秒単位で指定します。

解説
このメソッドのデフォルトの実装は何もしません。

このメソッドはビューを回転し、ヘッダーとフッターのビュー外にスライドさせるために使用され、アニメーションブロック内から呼び出されます。
このメソッドをオーバーライドし、ビューの回転の前半中に発生させる必要のある追加のアニメーションを構成に使用することができます。
例えば、コンテンツのズームレベルの調整や、スクロール位置の変更、またはビューの他のアニメーション可能なプロパティの変更に使用することができます。

このメソッドが呼び出された時点では、interfaceOrientationプロパティはまだ古い向きに設定されています。

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

宣言
UIViewController.h


willAnimateRotationToInterfaceOrientation:duration:

一行程でユーザインターフェイスの回転を実行する前に、ビューコントローラに送信されます。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration

パラメータ
interfaceOrientation
ユーザインターフェイスの新しい向きを指定します。
有効な値はUIInterfaceOrientationで説明しています。
duration
回転を保留する期間を秒単位で指定します。

解説
このメソッドはビューを回転するために使用されるアニメーションブロック内から呼び出されます。
このメソッドをオーバーライドし、ビューの回転中に発生させる必要のある追加のアニメーションを構成に使用することができます。
例えば、コンテンツのズームレベルの調整や、スクロール位置の変更、またはビューの他のアニメーション可能なプロパティの変更に使用することができます。

:位置の内外にヘッダーとフッターのビューをスライドさせるために使用されるアニメーションは、別のアニメーションブロックで実行されます。

このメソッドが呼び出された時点で、interfaceOrientationプロパティは既に新しい向きに設定され、ビューの境界変更されています。
したがって、このメソッドのビューによって必要な追加のレイアウトを実行することができます。

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

宣言
UIViewController.h


willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

ユーザインターフェイスの回転の後半の前に、ビューコントローラに送信されます。
(iOS 5.0では非推奨。代わりに一行程で回転する技術を使用してください。
willAnimateRotationToInterfaceOrientation:duration:メソッドを参照してください。)

- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration

パラメータ
fromInterfaceOrientation
回転する前のアプリケーションのユーザインターフェイスの向きの状態を指定します。
有効な値はUIInterfaceOrientationで説明しています。
duration
回転を保留する後半の期間を秒単位で指定します。

解説
このメソッドのデフォルトの実装は何もしません。

このメソッドはビューの回転を終了し、ヘッダーとフッターのビューを元の位置に戻すために使用され、アニメーションブロック内から呼び出されます。
このメソッドをオーバーライドし、ビューの回転の後半中に発生させる必要のある追加のアニメーションを構成に使用することができます。
例えば、コンテンツのズームレベルの調整や、スクロール位置の変更、またはビューの他のアニメーション可能なプロパティの変更に使用することができます。

このメソッドが呼び出された時点では、interfaceOrientationプロパティは新しい向きに設定されています。

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

宣言
UIViewController.h



●定数

遷移スタイルの表示

ビューコントローラを表示する時に利用できる遷移スタイルです。

typedef enum {
    UIModalTransitionStyleCoverVertical = 0,
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

定数

UIModalTransitionStyleCoverVertical
ビューコントローラが表示される時、画面の下部から上にビューがスライドします。
閉じる時はビューが下にスライドして戻ります。
これはデフォルトの遷移スタイルです。
iOS 3.0以降で利用可能
UIViewController.hで宣言

UIModalTransitionStyleFlipHorizontal
ビューコントローラが表示される時、現在のビューが右から左に3Dで水平方向に回転し始め、その結果以前のビューの背面として新しいビューがあるように見えます。
閉じる時は左から右に回転し元のビューに戻ります。
iOS 3.0以降で利用可能
UIViewController.hで宣言

UIModalTransitionStyleCrossDissolve
ビューコントローラが表示される時、現在のビューがフェードアウトすると同時に、新しいビューがフェードインします。
閉じる時は同様なクロスフェードで元のビューに戻ります。
iOS 3.0以降で利用可能
UIViewController.hで宣言

UIModalTransitionStylePartialCurl
ビューコントローラが表示される時、現在のビューの一角がその下にあるビューを現すためにカールアップします。
閉じる時は表示されていたビューの上にカールアップしたページが広がって戻ります。
この遷移を使用して表示されたビューは、それ自身にビューを追加表示することを防止します。
この遷移スタイルは、親ビューコントローラがフルスクリーンビューで表示されていて、UIModalPresentationFullScreenモーダル表示スタイルを使用している場合のみサポートされています。
親ビューのために異なる形式要素や異なる表示スタイルの使用を試みると例外が発生します。
iOS 3.2以降で利用可能
UIViewController.hで宣言



参考文献

UIViewController Class Reference

ITmediaエンタープライズ/Gartner Column:第11回 そもそも「セマンティクス」とは何だろう?






SoundSport Pulse wireless headphones
Calendar
05 | 2013/06 | 07
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 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundSport Pulse wireless headphones
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
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR