wxr
2020-06-16 f6fd8acd7c53c44187e70b4709443318a628f4b5
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>
        /// 是否正打开
        /// </summary>
        //public bool IsOpening;
        public bool IsShowLeft;
        public bool IsShowRight;
        /// <summary>
        /// 关闭其他RowLayout 显示的View
        /// </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>
        /// 关闭显示的View
        /// </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>
        /// 是否使用同样的SubViewWidth宽
        /// </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>