iOS 6 の概要

iOS 6 には、Xamarin.iOS 6 によって C# 開発者に提供されるアプリ開発用のさまざまな新しいテクノロジが含まれています。

The iOS 6 logo

iOS 6 と Xamarin.iOS 6 では、開発者は、iPhone 5 を対象とするアプリケーションを含め、iOS アプリケーションを作成するための豊富な機能を自由に使用できるようになりました。 このドキュメントでは、利用可能な中でより魅力的な新機能の一部をリストアップし、各トピックの記事へのリンクを提供します。 さらに、開発者が iOS 6 と iPhone 5 の新しい解像度に移行する際に重要になるいくつかの変更についても触れます。

コレクション ビューの概要

コレクション ビューを使用すると、任意のレイアウトを使用してコンテンツを表示できます。 これによって、カスタム レイアウトもサポートしながら、グリッドのようなレイアウトを簡単に作成できます。 詳細については、「コレクション ビューの概要」ガイドを参照してください。

PassKit の概要

PassKit フレームワークを使用すると、アプリケーションは Passbook アプリ内で管理されるデジタル パスとやり取りできます。 詳細については、「Pass Kit の概要ガイド」を参照してください。

EventKit の概要

EventKit フレームワークは、カレンダー データベースが保存しているカレンダー、カレンダー イベント、およびリマインダー データにアクセスする方法を提供します。 カレンダーおよびカレンダー イベントへのアクセスは iOS 4 以降で利用可能になっていますが、iOS 6 ではリマインダー データへのアクセスが公開されるようになりました。 詳細については、「EventKit の概要」ガイドを参照してください。

Social Framework の概要

Social Framework には、Twitter や Facebook に加え、中国のユーザー向けの SinaWeibo などのソーシャル ネットワークと対話するための統合 API が用意されています。 詳細については、「Social Framework の概要」ガイドを参照してください。

StoreKit の変更点

Apple は、アプリ内からの iTunes または App Store コンテンツの購入およびダウンロードと、アプリ内購入用のコンテンツ ファイルのホスティングという 2 つの新機能を Store Kit に導入しました。 詳細については、「Store Kit への変更」ガイドを参照してください。

その他の変更

ViewWillUnload および ViewDidUnload の非推奨化

UIViewControllerViewWillUnload および 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 上で実行されると、以下に示すように、レターボックスのように表示されます。

Applications that targeted previous versions of iOS will appear letterboxed when run on an iPhone 5

アプリケーションを iPhone 5 上でフルスクリーン表示するには、640 x 1136 の解像度を持つ Default-568h@2x.png という名前の画像を追加するだけです。 次のスクリーンショットは、この画像が含まれた後に実行されているアプリケーションを示しています。

This screenshot shows the application running after this image has been included

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);
​    }
}

サブクラス化された UINavigationBarUINavigationController に追加するには、以下に示すように、UINavigationBarUIToolbar の型を受け取る UINavigationController コンストラクターを使用します。

navController = new UINavigationController (typeof(CustomNavBar), typeof(UIToolbar));

この UINavigationBar サブクラスを使用すると、表示される画像ビューは次のスクリーンショットに示すようになります。

Using this UINavigationBar subclass results in the image view being displayed as shown in this screenshot

インターフェイスの向き

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 を除くすべての向きとなります。