wxr
2020-06-15 b8e94316e41eba72d927d5ca7d931b26139ee8ff
Shared.IOS/UI/HorizontalScrolViewLayout.cs
@@ -2,21 +2,22 @@
using UIKit;
using Shared.IO;
using Foundation;
using CoreGraphics;
namespace Shared
{
   /// <summary>
   /// 位置布局
   /// </summary>
   public  class HorizontalScrolViewLayout:ViewGroup
   {
      /// <summary>
      /// 构造函数
      /// </summary>
      public HorizontalScrolViewLayout()
      {
         viewGroup = new MyHorizontalScrolViewLayout(this) { };
         realViewGroup = viewGroup;
    /// <summary>
    /// 位置布局
    /// </summary>
    public class HorizontalScrolViewLayout : ViewGroup
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public HorizontalScrolViewLayout()
        {
            viewGroup = new MyHorizontalScrolViewLayout(this) { };
            realViewGroup = viewGroup;
            HorizontalScrollBarEnabled = false;
        }
@@ -83,88 +84,88 @@
        /// <returns>The chidren.</returns>
        /// <param name="view">View.</param>
        public override void AddChidren(View view)
      {
         base.AddChidren(view);
         ReLocation();
      }
        {
            base.AddChidren(view);
            ReLocation();
        }
      /// <summary>
      /// 重新排位置及设备内容大小
      /// </summary>
      public virtual void ReLocation()
      {
         if (0 == viewList.Count)
         {
            return;
         }
         for (int i = 1; i < viewList.Count; i++)
         {
            var frame = viewList[i].RealView.Frame;
            frame.X = viewList[i - 1].RealView.Frame.Right;
            viewList[i].RealView.Frame = frame;
         }
        /// <summary>
        /// 重新排位置及设备内容大小
        /// </summary>
        public virtual void ReLocation()
        {
            if (0 == viewList.Count)
            {
                return;
            }
            for (int i = 1; i < viewList.Count; i++)
            {
                var frame = viewList[i].RealView.Frame;
                frame.X = viewList[i - 1].RealView.Frame.Right;
                viewList[i].RealView.Frame = frame;
            }
         (realViewGroup as MyHorizontalScrolViewLayout).ContentSize = new CoreGraphics.CGSize(viewList[viewList.Count - 1].Right <= Width ? Width + 1 : viewList[viewList.Count - 1].Right,0);
      }
            (realViewGroup as MyHorizontalScrolViewLayout).ContentSize = new CoreGraphics.CGSize(viewList[viewList.Count - 1].Right <= Width ? Width + 1 : viewList[viewList.Count - 1].Right, 0);
        }
      /// <summary>
      /// 移除所有的视图
      /// </summary>
      public override  void RemoveAll()
      {
         base.RemoveAll();
         ReLocation ();
      }
        /// <summary>
        /// 移除所有的视图
        /// </summary>
        public override void RemoveAll()
        {
            base.RemoveAll();
            ReLocation();
        }
      /// <summary>
      /// 移除控件
      /// </summary>
      /// <param name="view">View.</param>
      internal override void Remove(View view)
      {
         base.Remove(view);
         ReLocation ();
      }
        /// <summary>
        /// 移除控件
        /// </summary>
        /// <param name="view">View.</param>
        internal override void Remove(View view)
        {
            base.Remove(view);
            ReLocation();
        }
      /// <summary>
      ///  移除指定索引对象
      /// </summary>
      /// <param name="index">Index.</param>
      public override void RemoveAt(int index)
      {
         base.RemoveAt(index);
         ReLocation ();
      }
        /// <summary>
        ///  移除指定索引对象
        /// </summary>
        /// <param name="index">Index.</param>
        public override void RemoveAt(int index)
        {
            base.RemoveAt(index);
            ReLocation();
        }
      /// <summary>
      /// 是否允许滑动
      /// </summary>
      /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value>
      public bool ScrollEnabled
      {
         get
         {
            return (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled;
         }
         set
         {
            (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled = value;
         }
      }
        /// <summary>
        /// 是否允许滑动
        /// </summary>
        /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value>
        public bool ScrollEnabled
        {
            get
            {
                return (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled;
            }
            set
            {
                (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled = value;
            }
        }
      /// <summary>
      /// 是否正在滑动
      /// </summary>
      /// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value>
      public bool Decelerating
      {
         get
         {
            return (viewGroup as MyHorizontalScrolViewLayout).Decelerating;
         }
      }
        /// <summary>
        /// 是否正在滑动
        /// </summary>
        /// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value>
        public bool Decelerating
        {
            get
            {
                return (viewGroup as MyHorizontalScrolViewLayout).Decelerating;
            }
        }
        /// <summary>
        /// 是否显示水平滚动条
        /// </summary>
@@ -177,6 +178,54 @@
            }
        }
        /// <summary>
        /// 滑动到指定位置
        /// </summary>
        /// <param name="viewX"></param>
        public void ScrollToX(int viewX)
        {
            //计算最大可以滚动的区域
            var maxX = (realViewGroup as MyHorizontalScrolViewLayout).ContentSize.Width - Width;
            if (viewX > maxX)
            {
                viewX = (int)maxX;
            }
            if (viewX < 0)
            {
                viewX = 0;
            }
            (viewGroup as MyHorizontalScrolViewLayout).SetContentOffset(new CGPoint(viewX, 0), false);
        }
        /// <summary>
        /// 滑动到指定VIEW
        /// </summary>
        /// <param name="viewIndex"></param>
        public void ScrollToViewIndex(int viewIndex)
        {
            if (viewList.Count == 0)
                return;
            var viewX = this.viewList[viewIndex].X;
            //计算最大可以滚动的区域
            var maxX = (realViewGroup as MyHorizontalScrolViewLayout).ContentSize.Width - Width;
            if (viewX > maxX)
            {
                viewX = (int)maxX;
            }
            if (viewX < 0)
            {
                viewX = 0;
            }
            (viewGroup as MyHorizontalScrolViewLayout).SetContentOffset(new CGPoint(viewX, 0), false);
        }
    }