天天看點

Xamarin.iOS 自定義樣式的彈出窗

項目中的一個界面,用到了彈出視窗,當我拿到效果圖的時候突然發現,iOS的彈出視窗我隻做過最基本的警告視圖。上個周末自己在家嘗試了用警告視圖來完成這個,結果發現沒辦法達到這個效果。最後打電話請教以前iOS原生開發的同僚整理了一條思路進行嘗試。

本篇文章隻記錄達到這個效果的思路和主要的代碼。

1.建立一個自定義的View,即建立一個類繼承自UIView,這個最外層的總view長和寬就是螢幕的長和寬,内部包含了彈出視窗的view,并設定最外層的View的透明度為半透明(16進制顔色址前兩位就是透明度)。

/// <summary>
    /// 自定義彈窗
    /// by ge
    /// </summary>
    public class PayAlertView : UIView
    {
        public PayAlertView(RectangleF viewFrame)
        {
            this.Frame = viewFrame;
        }

public override void LayoutSubviews()
        {
            base.LayoutSubviews();

//...省略建構view的代碼...
    //設定view的背景半透明黑色
            this.BackgroundColor = MvxTouchColor.BlacAlpha;
        }
           

2.建立好這個自定義的View後,在ViewController中引入這個View:

/// <summary>
        /// 支付彈窗view
        /// </summary>
        private PayAlertView _dialogView = null;
        public PayAlertView DialogView
        {
            get
            {
                if (_dialogView == null) {
                    _dialogView = new PayAlertView(new RectangleF(0, 0,
                                                                  (float)UIScreen.MainScreen.Bounds.Width, 
                                                                  (float)UIScreen.MainScreen.Bounds.Height));
                }
                return _dialogView;
            }
        }
           

3.當點選界面上某一個按鈕時,在他的委托點選事件中将自定義的View添加到Window中就可以了(判斷彈窗是否添加過了,避免隻能彈出一次):

//按鈕點選事件
                    payVipBtn.TouchUpInside += (sender, e) =>
                    {
                        if (DialogView.Hidden)
                            DialogView.Hidden = false;
                        else this.View.Window.AddSubview(DialogView);
                    };
           

4.隐藏彈窗。當我們需要關閉彈窗時直接隐藏就可以,再次點選按鈕時就不用像

//關閉彈窗
                    if (!DialogView.Hidden)
                        DialogView.Hidden = true;
           

思路記錄到這裡,如果哪裡寫錯了,或者寫法不太好請大家及時指出。進行優化

下面貼出,我的另一篇部落格:給自定義彈窗加透明漸變動畫。

http://blog.csdn.net/geanwen/article/details/54177841