しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Xamarin.iOS で画面の回転を検知する

すでに GitHub にアップしているソースには含まれているのですが、Xamarin.iOS で画面の回転を検知する方法を紹介します

moonmile さんがすでに XamarinでAndroid/iOS/Windowsストアの回転に対応する | Moonmile Solutions Blog の記事の中でこの手の実装方法を共有されているのですが、まだ Xamarin.Forms が出る前の内容だったので今回は Xamarin.Forms を生かしたもう少し簡単な方法になります

やることは ViewRenderer に下記のコードを書くだけ!

/// <summary>
/// Element 変更イベントハンドラ
/// </summary>
/// <param name="e">イベント引数</param>
protected override void OnElementChanged(ElementChangedEventArgs<ArcStepper> e)
{
    base.OnElementChanged(e);

    var page = this.Element.ParentView.ParentView as Page;
    if (page == null)
    {
        return;
    }
    page.SizeChanged += this.OnSizeChanged;
}

/// <summary>
/// サイズ変更イベントハンドラ
/// </summary>
/// <param name="sender">イベント発行者</param>
/// <param name="e">イベント引数</param>
private void OnSizeChanged(object sender, EventArgs e)
{
    // 再描画する
    this.SetNeedsDisplay();
}

Draw メソッドがレスポンシブデザイン対応されていればこれだけで大丈夫でした

f:id:matatabi_ux:20141013123950p:plain

f:id:matatabi_ux:20141013124001p:plain

簡単ですね!

変更後のサイズに応じて縦横も判定できると思うので色々応用できそうです