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