iOS 6 の概要
iOS 6 には、Xamarin.iOS 6 によって C# 開発者に提供されるアプリ開発用のさまざまな新しいテクノロジが含まれています。
iOS 6 と Xamarin.iOS 6 では、開発者は、iPhone 5 を対象とするアプリケーションを含め、iOS アプリケーションを作成するための豊富な機能を自由に使用できるようになりました。 このドキュメントでは、利用可能な中でより魅力的な新機能の一部をリストアップし、各トピックの記事へのリンクを提供します。 さらに、開発者が iOS 6 と iPhone 5 の新しい解像度に移行する際に重要になるいくつかの変更についても触れます。
コレクション ビューの概要
コレクション ビューを使用すると、任意のレイアウトを使用してコンテンツを表示できます。 これによって、カスタム レイアウトもサポートしながら、グリッドのようなレイアウトを簡単に作成できます。 詳細については、「コレクション ビューの概要」ガイドを参照してください。
PassKit の概要
PassKit フレームワークを使用すると、アプリケーションは Passbook アプリ内で管理されるデジタル パスとやり取りできます。 詳細については、「Pass Kit の概要ガイド」を参照してください。
EventKit の概要
EventKit フレームワークは、カレンダー データベースが保存しているカレンダー、カレンダー イベント、およびリマインダー データにアクセスする方法を提供します。 カレンダーおよびカレンダー イベントへのアクセスは iOS 4 以降で利用可能になっていますが、iOS 6 ではリマインダー データへのアクセスが公開されるようになりました。 詳細については、「 I ntroduction to EventKit ガイド」を参照してください。
Social Framework の概要
Social Framework には、Twitter や Facebook に加え、中国のユーザー向けの SinaWeibo などのソーシャル ネットワークと対話するための統合 API が用意されています。 詳細については、「Social Framework の概要」ガイドを参照してください。
StoreKit の変更点
Apple は、アプリ内からの iTunes または App Store コンテンツの購入およびダウンロードと、アプリ内購入用のコンテンツ ファイルのホスティングという 2 つの新機能を Store Kit に導入しました。 詳細については、「Store Kit への変更」ガイドを参照してください。
その他の変更
ViewWillUnload および ViewDidUnload の非推奨化
UIViewController
の ViewWillUnload
および ViewDidUnload
メソッドは、iOS 6 では呼び出されなくなりました。 以前のバージョンの iOS では、これらのメソッドはそれぞれ、ビューのアンロード前の状態の保存とクリーンアップ コードのためにアプリケーションによって使用される場合がありました。
たとえば、Visual Studio for Mac では、以下に示すように ReleaseDesignerOutlets
という名前のメソッドが作成され、これがその後 ViewDidUnload
から呼び出されていました。
void ReleaseDesignerOutlets ()
{
if (myOutlet != null) {
myOutlet.Dispose ();
myOutlet = null;
}
}
しかし、iOS 6 では、ReleaseDesignerOutlets
を呼び出す必要はなくなりました。
クリーンアップ コードとして、iOS 6 アプリケーションは DidReceiveMemoryWarning
を使用する必要があります。 ただし、Dispose
を呼び出すコードは、以下に示すように、メモリを集中的に使用するオブジェクトに対してのみ慎重に使用する必要があります。
if (myImageView != null){
if (myImageView.Superview == null){
myImageView.Dispose();
myImageView = null;
}
}
繰り返しになりますが、上記のように Dispose
を呼び出す必要はほとんどないはずです。 一般的に、ほとんどのアプリケーションが行うべきことは、イベント ハンドラーを削除することです。
状態の保存のケースでは、アプリケーションは ViewWillUnload
の代わりに ViewWillDisappear
および ViewDidDisappear
の中でこれを実行することができます。
iPhone 5 の解像度
iPhone 5 デバイスの解像度は 640 x 1136 です。 iOS の以前のバージョンを対象としていたアプリケーションは、iPhone 5 上で実行されると、以下に示すように、レターボックスのように表示されます。
アプリケーションを iPhone 5 上でフルスクリーン表示するには、640 x 1136 の解像度を持つ Default-568h@2x.png
という名前の画像を追加するだけです。 次のスクリーンショットは、この画像が含まれた後に実行されているアプリケーションを示しています。
UINavigationBar のサブクラス化
iOS 6 では、UINavigationBar
をサブクラス化できます。 これにより、UINavigationBar
の外観をより細かく制御できます。 たとえば、アプリケーションでサブクラス化を行うことで、サブビューを追加したり、それらのビューをアニメーション化したり、UINavigationBar
の境界を変更したりできます。
以下のコードは、UIImageView
を追加するサブクラス化された UINavigationBar
の例を示しています。
public class CustomNavBar : UINavigationBar
{
UIImageView iv;
public CustomNavBar (IntPtr h) : base(h)
{
iv = new UIImageView (UIImage.FromFile ("monkey.png"));
iv.Frame = new CGRect (75, 0, 30, 39);
}
public override void Draw (RectangleF rect)
{
base.Draw (rect);
TintColor = UIColor.Purple;
AddSubview (iv);
}
}
サブクラス化された UINavigationBar
を UINavigationController
に追加するには、以下に示すように、UINavigationBar
と UIToolbar
の型を受け取る UINavigationController
コンストラクターを使用します。
navController = new UINavigationController (typeof(CustomNavBar), typeof(UIToolbar));
この UINavigationBar
サブクラスを使用すると、表示される画像ビューは次のスクリーンショットに示すようになります。
インターフェイスの向き
iOS 6 より前のアプリケーションでは ShouldAutorotateToInterfaceOrientation
のオーバーライドが可能で、特定のコントローラーがサポートする任意の方向に対して true を返していました。 たとえば、ポートレートだけをサポートするには次のコードが使用されていました。
public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
return (toInterfaceOrientation == UIInterfaceOrientation.Portrait);
}
iOS 6 では、ShouldAutorotateToInterfaceOrientation
は非推奨となっています。
代わりに、以下に示すように、アプリケーションはルート ビュー コントローラー上の GetSupportedInterfaceOrientations
をオーバーライドできます。
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()
{
return UIInterfaceOrientationMask.Portrait;
}
iPad では、GetSupportedInterfaceOrientation
が実装されていない場合、これは既定で 4 つの向きすべてに設定されます。 iPhone と iPod Touch では、既定値は PortraitUpsideDown
を除くすべての向きとなります。