From b8e94316e41eba72d927d5ca7d931b26139ee8ff Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期一, 15 六月 2020 09:12:53 +0800 Subject: [PATCH] 20200612 --- Shared.IOS/UI/UIDrawerLayout.cs | 210 ++++++++++++++++++++++++++++++++++----------------- 1 files changed, 139 insertions(+), 71 deletions(-) diff --git a/Shared.IOS/UI/UIDrawerLayout.cs b/Shared.IOS/UI/UIDrawerLayout.cs index f8a23ba..bca0d56 100644 --- a/Shared.IOS/UI/UIDrawerLayout.cs +++ b/Shared.IOS/UI/UIDrawerLayout.cs @@ -28,8 +28,19 @@ } } + /// <summary> + /// 宸︿晶鑿滃崟View + /// </summary> UIView leftView; + /// <summary> + /// 涓昏彍鍗昖iew + /// </summary> UIView mainView; + /// <summary> + /// 钂欏眰閬尅View + /// </summary> + MyMaskUIView maskUIView; + /// <summary> /// 鏋勯�犲嚱鏁� @@ -38,31 +49,75 @@ { mUIDrawerLayout = new MyUIDrawerLayout(this) { }; - viewGroup = mUIDrawerLayout; mainView = new UIView(); realViewGroup = mainView; - - viewGroup.AddSubview(realViewGroup); viewGroup.Layer.MasksToBounds = true; - leftView = new UIView(); //new UIView(new CGRect(0, 0, Application.CurrentWidth, Application.CurrentHeight)); - var mFrame = leftView.Frame; - mFrame.Y = 0; - mFrame.X = 0; - mFrame.Width = Application.CurrentWidth; - mFrame.Height = Application.CurrentHeight; - mFrame.X = -Application.CurrentWidth; - leftView.Frame = mFrame; + var leftViewFrame = leftView.Frame; + leftViewFrame.Y = 0; + leftViewFrame.X = 0; + leftViewFrame.Width = Application.CurrentWidth; + leftViewFrame.Height = Application.CurrentHeight; + leftViewFrame.X = -Application.CurrentWidth; + leftView.Frame = leftViewFrame; leftView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 99); - viewGroup.AddSubview(leftView); + + maskUIView = new MyMaskUIView(); + var maskFrame = maskUIView.Frame; + maskFrame.Y = 0; + maskFrame.X = 0; + maskFrame.Width = Application.CurrentWidth; + maskFrame.Height = Application.CurrentHeight; + maskUIView.Frame = maskFrame; + maskUIView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 0); + viewGroup.AddSubview(maskUIView); + } + + /// <summary> + /// 鍒锋柊宸iew鏄剧ず鐨勪綅缃� + /// </summary> + /// <param name="leftFrame">鏈�缁坴iew鐨勪綅缃�</param> + /// <param name="needAnimations">鏄惁闇�瑕佸钩绉诲姩鐢�</param> + void RefreshLeftViewFrame(CGRect leftFrame, bool needAnimations = true) + { + //leftView.Frame = leftFrame; + //RefreshMaskUIViewBackgroundColor(leftView.Frame.X); + + //2020-06-11 澧炲姞骞崇Щ鍔ㄧ敾 + if (!needAnimations) + { + leftView.Frame = leftFrame; + RefreshMaskUIViewBackgroundColor(leftView.Frame.X); + } + else + { + UIView.BeginAnimations("move"); + UIView.SetAnimationDuration(0.5); + //UIView.SetAnimationDelegate(leftView); + leftView.Frame = leftFrame; + RefreshMaskUIViewBackgroundColor(leftView.Frame.X); + UIView.CommitAnimations(); + + } } - + /// <summary> + /// 鍒锋柊钂欏眰View鐨勪綅缃拰閫忔槑搴﹂鑹� + /// </summary> + /// <param name="leftViewX"></param> + void RefreshMaskUIViewBackgroundColor(nfloat leftViewX) + { + int alpha = 180 + (int)(leftViewX / mUIDrawerLayout.Frame.Size.Width * 180); + maskUIView.BackgroundColor = UIColor.FromRGBA(0, 0, 0, alpha); + var maskFrame = maskUIView.Frame; + maskFrame.X = leftView.Frame.X + leftView.Frame.Width; + maskUIView.Frame = maskFrame; + } View leftChildView; @@ -80,19 +135,9 @@ view.Parent = this; leftChildView = view; - //view.X = 0; - //view.Y = 0; - //view.Width = Width; - //view.Height = Height; - - //view.Parent = this; - //view.Refresh(); var addFrame = leftView.Frame; addFrame.X = 0; addFrame.Y = 0; - //addFrame.Height = Height; - //addFrame.Width = Width; - leftChildView.RealView.Frame = addFrame; leftView.AddSubview(leftChildView.RealView); @@ -111,32 +156,33 @@ { leftChildView.RealView.RemoveFromSuperview(); } + leftChildView.Parent = null; } /// <summary> /// 鏄惁閿佸畾鍙虫粦鍔熻兘锛� 閿佸畾鍚庡彸婊戝脊鍑鸿彍鍗曞け鏁� /// </summary> - bool _IsDrawerLockMode; + bool isDrawerLockModei; public bool IsDrawerLockMode { - get鈥� {鈥� return _IsDrawerLockMode;鈥� } + get鈥� {鈥� return isDrawerLockModei;鈥� } set { - _IsDrawerLockMode = value; - mUIDrawerLayout.IsDrawerLockMode = _IsDrawerLockMode; + isDrawerLockModei = value; + mUIDrawerLayout.IsDrawerLockMode = isDrawerLockModei; } } - bool _IsDrawerOpen = false; + bool isDrawerOpen = false; private bool IsDrawerOpen { - get鈥� {鈥� return _IsDrawerOpen;鈥� } + get鈥� {鈥� return isDrawerOpen;鈥� } set { - _IsDrawerOpen = value; - mUIDrawerLayout.IsDrawerOpen = _IsDrawerOpen; + isDrawerOpen = value; + mUIDrawerLayout.IsDrawerOpen = isDrawerOpen; } @@ -147,17 +193,14 @@ /// </summary> public void OpenLeftMenu() { - if (!IsDrawerOpen) { IsDrawerOpen = true; ShowLeftView(IsDrawerOpen); - //System.Console.WriteLine("OpenLeftMenu-------"); + //Shared.HDLUtils.WriteLine("OpenLeftMenu-------"); } - + } - - /// <summary> /// 鍏抽棴鎶藉眽view @@ -168,7 +211,7 @@ { IsDrawerOpen = false; ShowLeftView(IsDrawerOpen); - //System.Console.WriteLine("CloseLeftMenu-------"); + //Shared.HDLUtils.WriteLine("CloseLeftMenu-------"); } } @@ -186,8 +229,6 @@ //} - - /// <summary> /// 鏄惁鎵撳紑鏄剧ず宸﹁竟鑿滃崟view /// </summary> @@ -195,30 +236,31 @@ { var mFrame = leftView.Frame; mFrame.X = bShow ? 0 : -mUIDrawerLayout.Frame.Size.Width; - leftView.Frame = mFrame; + RefreshLeftViewFrame(mFrame); } + /// <summary> /// 绉诲姩宸﹁竟view /// </summary> - public void MoveLeftView(nfloat XX) - { + public void MoveLeftView(nfloat moveX) + { if (IsDrawerOpen) { - if (XX < 0) + if (moveX < 0) { var mFrame = leftView.Frame; - mFrame.X = 0 + XX; - leftView.Frame = mFrame; + mFrame.X = 0 + moveX; + RefreshLeftViewFrame(mFrame,false); } } else { - if(XX > 0) + if (moveX > 0) { var mFrame = leftView.Frame; - mFrame.X = -mUIDrawerLayout.Frame.Size.Width + XX; - leftView.Frame = mFrame; + mFrame.X = -mUIDrawerLayout.Frame.Size.Width + moveX; + RefreshLeftViewFrame(mFrame,false); } } @@ -235,15 +277,15 @@ if (IsDrawerOpen) { mFrame.X = 0; - //System.Console.WriteLine($"Reset Open"); + //Shared.HDLUtils.WriteLine($"Reset Open"); } else { mFrame.X = -mUIDrawerLayout.Frame.Size.Width; - //System.Console.WriteLine($"Reset CLOSE"); + //Shared.HDLUtils.WriteLine($"Reset CLOSE"); } - leftView.Frame = mFrame; + RefreshLeftViewFrame(mFrame); } @@ -252,7 +294,7 @@ private void MYTouchEvent(EventActions eventAction, CGPoint point) { - if (_IsDrawerLockMode) return; + if (isDrawerLockModei) return; switch (eventAction) { @@ -261,25 +303,23 @@ //璁板綍鐐瑰嚮鐨勬渶鏂癤鍧愭爣 mLastX = point.X; mLastY = point.Y; - //System.Console.WriteLine($"DrawerLayout:EventActions.Down XXX{mLastX}"); + //Shared.HDLUtils.WriteLine($"DrawerLayout:EventActions.Down XXX{mLastX}"); break; case EventActions.Move: moveWithPoint(point); - //System.Console.WriteLine("DrawerLayout:EventActions.Move"); + //Shared.HDLUtils.WriteLine("DrawerLayout:EventActions.Move"); break; case EventActions.Up: - //System.Console.WriteLine($"DrawerLayout:EventActions.Down deltaX{deltaX} WWW:{mUIDrawerLayout.Frame.Size.Width} "); + //Shared.HDLUtils.WriteLine($"DrawerLayout:EventActions.Down deltaX{deltaX} WWW:{mUIDrawerLayout.Frame.Size.Width} "); if (Math.Abs(deltaX) >= mUIDrawerLayout.Frame.Size.Width / 2) { if (deltaX > 0) { - //System.Console.WriteLine("DrawerOpen"); IsDrawerOpen = true; ShowLeftView(IsDrawerOpen); } else { - //System.Console.WriteLine("Drawer CLOSE"); IsDrawerOpen = false; ShowLeftView(IsDrawerOpen); } @@ -289,7 +329,6 @@ ResetView(); } - //System.Console.WriteLine("DrawerLayout:EventActions.Up"); break; } @@ -313,12 +352,7 @@ if (mLastX < 10) { MoveLeftView(deltaX); - //浠庡睆骞曞乏渚у紑濮嬫粦鍔紝鎵嶈Е鍙� - //MoveAction?.Invoke(deltaX); - } - - } } @@ -339,8 +373,6 @@ public MyUIDrawerLayout(UIDrawerLayout mUIDrawerLayout) { this.mUIDrawerLayout = mUIDrawerLayout; - - } @@ -351,6 +383,8 @@ public override UIView HitTest(CGPoint point, UIEvent uievent) { + //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}"); + if (!IsDrawerLockMode)//涓嶉攣瀹氾紝鍏佽鍙虫粦 { if (PointInside(point, uievent)) @@ -359,7 +393,7 @@ { if (point.X > this.Frame.Size.Width - 10) { - //System.Console.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}"); + //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}"); return this;//鎷︽埅 } @@ -368,8 +402,8 @@ { if (point.X < 10) { - //System.Console.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}"); - return this; return this;//鎷︽埅 + //Shared.HDLUtils.WriteLine($"MyUIDrawerLayout:HitTest{point.X} uievent{uievent.ToString()}"); + return this; } } @@ -377,6 +411,17 @@ } return base.HitTest(point, uievent);//涓嶆嫤鎴� + + //UIView viewReturn = base.HitTest(point, uievent); + //if (viewReturn is MyUIDrawerLayout) + //{ + // return base.HitTest(point, uievent);//涓嶆嫤鎴� + //} + //else { + + + // return base.HitTest(point, uievent);//涓嶆嫤鎴� + //} } @@ -387,10 +432,10 @@ /// <param name="evt">Evt.</param> public override void TouchesBegan(NSSet touches, UIEvent evt) { - //System.Console.WriteLine("MyUIDrawerLayout:TouchesBegan"); + //Shared.HDLUtils.WriteLine("MyUIDrawerLayout:TouchesBegan"); mUIDrawerLayout?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); mUIDrawerLayout?.MYTouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); - + } /// <summary> /// 绉诲姩 @@ -412,7 +457,7 @@ { mUIDrawerLayout?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); mUIDrawerLayout?.MYTouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); - //System.Console.WriteLine("MyUIDrawerLayout:TouchesEnded"); + //Shared.HDLUtils.WriteLine("MyUIDrawerLayout:TouchesEnded"); } public override void TouchesCancelled(NSSet touches, UIEvent evt) @@ -432,9 +477,32 @@ } base.AddSubview(view); } + } + + /// <summary> + /// 钂欏眰View + /// </summary> + class MyMaskUIView : UIView + { + public MyMaskUIView() + { + + + + } + + /// <summary> + /// 瀵绘壘鏈�閫傚悎鐨刅iew + /// 瀹炵幇鎷︽埅 + /// </summary> + public override UIView HitTest(CGPoint point, UIEvent uievent) + { + return null; + } } + } } \ No newline at end of file -- Gitblit v1.8.0