項目中的一個界面,用到了彈出視窗,當我拿到效果圖的時候突然發現,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