From f6fd8acd7c53c44187e70b4709443318a628f4b5 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期二, 16 六月 2020 13:12:33 +0800
Subject: [PATCH] 2020-06-016

---
 Shared.IOS/UI/RowLayout.cs |  270 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 249 insertions(+), 21 deletions(-)

diff --git a/Shared.IOS/UI/RowLayout.cs b/Shared.IOS/UI/RowLayout.cs
index 66462e2..558a638 100644
--- a/Shared.IOS/UI/RowLayout.cs
+++ b/Shared.IOS/UI/RowLayout.cs
@@ -11,10 +11,15 @@
 	/// </summary>
 	public class RowLayout : ViewGroup
 	{
-		/// <summary>
-		/// 鍙宠竟鐨勮鍥惧垪琛�
-		/// </summary>
-		internal System.Collections.Generic.List<Button> leftView = new System.Collections.Generic.List<Button>();
+        /// <summary>
+        /// OpenMenuAction
+        /// </summary>
+        public Action OpenMenuAction;
+        
+        /// <summary>
+        /// 鍙宠竟鐨勮鍥惧垪琛�
+        /// </summary>
+        internal System.Collections.Generic.List<Button> leftView = new System.Collections.Generic.List<Button>();
 		/// <summary>
 		/// 鍙宠竟鐨勮鍥惧垪琛�
 		/// </summary>
@@ -113,34 +118,209 @@
 			}
 		}
 
-		/// <summary>
-		/// 澧炲姞宸﹁竟瑙嗗浘
-		/// </summary>
-		/// <param name="view">View.</param>
-		public void AddLeftView(Button view)
+        /// <summary>
+        /// 鏄惁姝f墦寮�
+        /// </summary>
+        //public bool IsOpening;
+        public bool IsShowLeft;
+        public bool IsShowRight;
+
+        /// <summary>
+        /// 鍏抽棴鍏朵粬RowLayout 鏄剧ず鐨刅iew
+        /// </summary>
+        private void HideOtherRowLayout()
+        {
+            try
+            {
+                if (this.Parent != null)
+                {
+                    foreach (View mView in Parent.viewList)
+                    {
+                        if (mView is RowLayout && mView != this)
+                        {
+
+                            if ((mView as RowLayout).IsShowRight || (mView as RowLayout).IsShowLeft)
+                            {
+                                (mView as RowLayout).HideMenu();
+                            }
+                        }
+                    }
+
+                }
+            }
+            catch
+            {
+            }
+        }
+
+        /// <summary>
+        /// 鍏抽棴鏄剧ず鐨刅iew
+        /// </summary>
+        public void HideMenu()
+        {
+            if (IsShowLeft)
+            {
+                HideLeftMenu();
+            }
+            if (IsShowRight)
+            {
+                HideRightMenu();
+            }
+
+        }
+
+        public void OpenLeftMenu()
+        {
+            HideOtherRowLayout();
+            if (IsShowRight)
+            {
+                HideRightMenu();
+                return;
+            }
+
+            if (leftView.Count == 0)
+                return;
+
+           
+            IsShowLeft = true;
+            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(leftView[0].RealView.Frame.X, 0), true);
+            OpenMenuAction?.Invoke();
+        }
+
+        public void HideLeftMenu()
+        {
+            IsShowLeft = false;
+            HideAllMenuView();
+        }
+
+        public void OpenRightMenu()
+        {
+            HideOtherRowLayout();
+            if (IsShowLeft)
+            {
+                HideLeftMenu();
+                return;
+            }
+            if (rigthView.Count == 0)
+                return;
+            IsShowRight = true;
+            var rigthViewX = realViewGroup.Frame.X + GetAllRightViewWidth();
+            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(rigthViewX, 0), true);
+            OpenMenuAction?.Invoke();
+
+        }
+
+        public void HideRightMenu()
+        {
+            IsShowRight = false;
+
+            HideAllMenuView();
+        }
+
+        void RestMenuView() {
+            if (IsShowRight)
+            {
+                OpenRightMenu();
+            }
+            else if (IsShowLeft)
+            {
+                OpenLeftMenu();
+
+            }
+            else {
+                HideAllMenuView();
+            }
+          
+        }
+
+        void HideAllMenuView()
+        {
+            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), true);
+        }
+
+        /// <summary>
+        /// 鏄惁浣跨敤鍚屾牱鐨凷ubViewWidth瀹� 
+        /// </summary>
+        bool isUseSameSubViewWidth = true;
+        public bool IsUseSameSubViewWidth
+        {
+            get
+            {
+                return isUseSameSubViewWidth;
+
+            }
+            set
+            {
+                isUseSameSubViewWidth = value;
+            }
+
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠leftView鐨勬�诲
+        /// </summary>
+        /// <returns></returns>
+        int GetAllLeftViewWidth() {
+            int mWidth = 0;
+            foreach (var mView in leftView)
+            {
+                mWidth += mView.Width;
+            }
+            return mWidth;
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠rigthView鐨勬�诲
+        /// </summary>
+        /// <returns></returns>
+        int GetAllRightViewWidth()
+        {
+            int mWidth = 0;
+            foreach (var mView in rigthView)
+            {
+                mWidth += mView.Width;
+            }
+            return mWidth;
+        }
+
+
+        /// <summary>
+        /// 澧炲姞宸﹁竟瑙嗗浘
+        /// </summary>
+        /// <param name="view">View.</param>
+        public void AddLeftView(Button view)
 		{
 			if (null == view)
 			{
 				return;
 			}
-			view.X = leftView.Count * SubViewWidth;
+
+            var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
+
+            view.X = GetAllLeftViewWidth();
 			view.Y = 0;
-			view.Width = SubViewWidth;
+			view.Width = mSubViewWidth;
 			view.Height = Height;
 			viewGroup.AddSubview(view.RealView);
 			view.Parent = this;
 			view.Refresh();
 			leftView.Add(view);
 			var frame = realViewGroup.Frame;
-			frame.X += SubViewWidth;
+			frame.X += mSubViewWidth;
 			realViewGroup.Frame = frame;
 			foreach (var right in rigthView)
 			{
-				right.X += SubViewWidth;
+				right.X += mSubViewWidth;
 			}
-			(viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize((leftView.Count + rigthView.Count) * SubViewWidth + realViewGroup.Frame.Width, 0);
-			(viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
+
+            RefreshContentSize();
 		}
+
+        void RefreshContentSize() {
+            var menuWidth = GetAllLeftViewWidth() + GetAllRightViewWidth();
+            (viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize(menuWidth + realViewGroup.Frame.Width, 0);
+            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
+        }
 
         internal override void removeChildParent()
         {
@@ -165,20 +345,22 @@
 			{
 				return;
 			}
-			view.X =(int)realViewGroup.Frame.Right+ rigthView.Count * SubViewWidth;
+            var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
+
+            view.X =(int)realViewGroup.Frame.Right + GetAllRightViewWidth();
 			view.Y = 0;
-			view.Width = SubViewWidth;
+			view.Width = mSubViewWidth;
 			view.Height = Height;
 			viewGroup.AddSubview(view.RealView);
 			view.Parent = this;
 			view.Refresh();
 			rigthView.Add(view);
 
-			(viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize((leftView.Count + rigthView.Count) * SubViewWidth + realViewGroup.Frame.Width, 0);
-			(viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
-
+            RefreshContentSize();
 		}
 
+        nfloat beforeXScrollX;
+        nfloat moveX;
         /// <summary>
         /// 鍦ㄦ粦鍔ㄤ簨浠朵笅锛屽彲鏄剧ず闅愯棌浜涜嚜瀹氫箟瑙嗗浘
         /// </summary>
@@ -197,9 +379,55 @@
 			viewGroup.AddSubview(lineUIView);
 
             (viewGroup as UIScrollView).ShowsHorizontalScrollIndicator = false;//闅愯棌姘村钩婊氬姩鏉�
-          
+
+           
+            (viewGroup as UIScrollView).Scrolled += (s, e) =>
+            {
+                moveX = (viewGroup as UIScrollView).ContentOffset.X - beforeXScrollX;
+            };
+
+            (viewGroup as UIScrollView).DraggingStarted += (sender, e) =>
+            {
+                beforeXScrollX = (viewGroup as UIScrollView).ContentOffset.X;
+            };
+
+            (viewGroup as UIScrollView). DecelerationStarted += (s, e) =>
+            {
+              
+                GetMovePageIndex();
+
+            };
+
+           
+
+            (viewGroup as UIScrollView).DraggingEnded += (s, e) =>
+            {
+                if (!e.Decelerate)
+                {
+                    GetMovePageIndex();
+                }
+            };
+
         }
 
+        void GetMovePageIndex(){
+
+            if (20 < Math.Abs(moveX))
+            {
+                if (moveX < 0)
+                {
+                    OpenLeftMenu();
+                }
+                else if (moveX > 0)
+                {
+                    OpenRightMenu();
+                }
+            }
+            else
+            {
+                RestMenuView();
+            }
+        }
 
 
         /// <summary>

--
Gitblit v1.8.0