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/HorizontalPages.cs | 1380 ++++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 832 insertions(+), 548 deletions(-)

diff --git a/Shared.IOS/UI/HorizontalPages.cs b/Shared.IOS/UI/HorizontalPages.cs
index f891f2a..938bc33 100644
--- a/Shared.IOS/UI/HorizontalPages.cs
+++ b/Shared.IOS/UI/HorizontalPages.cs
@@ -14,156 +14,859 @@
     {
         readonly MyHorizontalPages iosUIScrolView;
 
-        //readonly UIPageControl iosUIPageControl;
-
-   
         /// <summary>
         /// 椤甸潰鍙樺寲浜嬩欢
         /// </summary>
-        public Action<HorizontalPages,int> PageChange;
+        public Action<HorizontalPages, int> PageChange;
+
+        /// <summary>
+        /// 寮�濮嬫粦鍔ㄤ簨浠�
+        /// </summary>
+        public Action StartScrollAction;
+        /// <summary>
+        /// 缁撴潫婊戝姩浜嬩欢
+        /// </summary>
+        public Action EndScrollAction ;
+
+        /// <summary>
+        /// 娌℃湁鏇村鎻愮ずAction锛屽凡缁忔槸鏈�鍚庝竴涓�
+        /// </summary>
+        public Action NoMoreAction;
+
+       //ImageView LeftImageView = new ImageView() { ImagePath = "RoomIcon/1.jpg" };
+       //ImageView RightImageView = new ImageView() { ImagePath = "RoomIcon/2.jpg" };
+
+      
+
+     
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        public HorizontalPages()
+        {
+            viewGroup = new UIView();
+            iosUIScrolView = new MyHorizontalPages(this) { };
+            iosUIScrolView.Bounces = false;
+            InitMyHorizontalPagesEvent();
+            realViewGroup = iosUIScrolView;
+            //鍚姩缈婚〉鍔熻兘
+            //iosUIScrolView.PagingEnabled = true;
+            iosUIScrolView.ShowsHorizontalScrollIndicator = false;
+            viewGroup.AddSubview(iosUIScrolView);
+            pagePadding = Application.GetRealWidth(50);
+            rowPadding = Application.GetRealWidth(100);
+            mTCBJ = Application.GetRealWidth(50);
+
+        }
+
+        ImageView LeftImageView;
+        ImageView RightImageView;
+        /// <summary>
+        /// 鏄惁璁剧疆浜嗚櫄鍋囪儗鏅疺iew 璁剧疆浜嗘墠鏄剧ず
+        /// </summary>
+        bool IsSetLeftAndRightImageView = false;
+        /// <summary>
+        /// 璁剧疆鎺у埗鏈�宸﹀拰鏈�鍙�2杈癸紝濉厖鐨勫亣鑳屾櫙View锛屼笉璁剧疆涓嶆樉绀猴紝闇�瑕佸湪AddChidren 鍓嶈皟鐢ㄨ鏂规硶
+        /// </summary>
+        /// <param name="mLeftImageView"></param>
+        /// <param name="mRightImageView"></param>
+        public void SetLeftAndRightImageView(ImageView mLeftImageView, ImageView mRightImageView)
+        {
+            if (mLeftImageView == null) return;
+
+            if (mRightImageView == null) return;
+
+            //璁剧疆涔嬪墠鍏堟竻绌轰竴娆�
+            foreach (var view in iosUIScrolView.Subviews)
+            {
+                view.RemoveFromSuperview();
+            }
+
+            LeftImageView = mLeftImageView;
+            iosUIScrolView.AddSubview(LeftImageView.RealView);
+            LeftImageView.Parent = this;
+            LeftImageView.Refresh();
+
+            RightImageView = mRightImageView;
+            iosUIScrolView.AddSubview(RightImageView.RealView);
+            RightImageView.Parent = this;
+            RightImageView.Refresh();
+
+            IsSetLeftAndRightImageView = true;
+
+        }
+
+        bool isNoMore;
+        bool isStart;
+        int mTouchSlop = 20;
+        nfloat beforeXScrollX;
+        nfloat moveX;
+        void InitMyHorizontalPagesEvent()
+        {
+           
+
+            iosUIScrolView.Scrolled += (s, e) =>
+            {
+                //Shared.HDLUtils.WriteLine($"HorizontalPages Scrolled ContentOffsetX:{iosUIScrolView.ContentOffset.X}");
+                moveX = iosUIScrolView.ContentOffset.X - beforeXScrollX;
+                RefreshPageView();
+
+                if (mTouchSlop < Math.Abs(moveX))
+                {
+                    if (!isStart)
+                    {
+
+                        //褰撳墠绱㈠紩涓猴紝涓嶆槸绗竴涓垨鑰呮渶鍚庝竴涓紝婊戝姩璺濈澶т簬瑙﹀彂璺濈骞朵笖娌℃墽琛岃繃鍒� 鎵ц涓�娆tartScrollAction
+                        if ((moveX > 0 && PageIndex < ChildrenCount - 1) || (moveX < 0 && PageIndex > 0))
+                        {
+                            isStart = true;
+                            StartScrollAction?.Invoke();
+                        }
+
+                    }
+
+                    
+                    if (!isNoMore && !bSendPageChange)
+                    {
+                        //褰撳墠绱㈠紩涓虹涓�涓垨鑰呮渶鍚庝竴涓紝婊戝姩璺濈澶т簬瑙﹀彂璺濈銆佹病鎵ц杩囥�丳ageIndex娌″彉鍖栥�佸垯鎵ц涓�娆oMoreAction
+                        if ((moveX > 0 && PageIndex == ChildrenCount - 1 && iosUIScrolView.ContentOffset.X > iosUIScrolView.ContentSize.Width - iosUIScrolView.Frame.Width) || (moveX < 0 && PageIndex == 0 && iosUIScrolView.ContentOffset.X < 0))
+                        {
+                            isNoMore = true;
+                            NoMoreAction?.Invoke();
+                        }
+
+                    }
+                }
+
+              
+            };
+
+            iosUIScrolView.DraggingStarted += (sender, e) =>
+            {
+                //Shared.HDLUtils.WriteLine("HorizontalPages DraggingStarted");
+                SetIsScrolling(true);
+                beforeXScrollX = iosUIScrolView.ContentOffset.X;
+                isStart = false;
+                isNoMore = false;
+                //StartScrollAction?.Invoke();
+            };
+
+            iosUIScrolView.DecelerationStarted += (s, e) =>
+            {
+                GetMovePageIndex();
+
+            };
+
+            iosUIScrolView.DecelerationEnded += (s, e) =>
+            {
+               
+                if (!bSendPageChange && (PageIndex == ChildrenCount - 1 || PageIndex == 0 )) {
+                    //褰撳墠绱㈠紩涓猴紝绗竴涓垨鑰呮渶鍚庝竴涓紝骞朵笖涔嬪墠鎵ц杩囧紑濮婣ction
+                    SendEndScrollAction();
+
+                  
+                }
+
+            };
+
+            iosUIScrolView.DraggingEnded += (s, e) =>
+            {
+                if (!e.Decelerate)
+                {
+                    GetMovePageIndex();
+                }
+            };
+
+            iosUIScrolView.ScrollAnimationEnded += (s, e) =>
+            {
+                //Shared.HDLUtils.WriteLine("HorizontalPages ScrollAnimationEnded");
+                SendIfPageChange();
+                SetIsScrolling(false);
+            };
+        }
+
+
+        private void GetMovePageIndex()
+        {
+
+            if (mTouchSlop < Math.Abs(moveX))
+            {
+                if (moveX < 0)
+                {
+                    PageIndex -= 1;
+                }
+                else if (moveX > 0)
+                {
+                    PageIndex += 1;
+                }
+            }
+            else
+            {
+                PageIndex = PageIndex;
+
+            }
+
+        }
+
+        //涓や釜Page鐣岄潰涔嬮棿鐨勮窛绂�
+        int pagePadding;
+        /// <summary>
+        /// 鐣岄潰涔嬮棿鐨勮竟璺�
+        /// </summary>
+        public int JMBJ
+        {
+            get
+            {
+                return pagePadding;
+            }
+            set
+            {
+                pagePadding = value;
+                rowPadding = mTCBJ + pagePadding;
+                RefreshScrollWidth();
+                ReLocation();
+            }
+        }
+
+        //page鐨勪笌鎵嬫満灞忓箷鐨勮竟璺� = 绐佸嚭瀹藉害 + 涓や釜Page涔嬮棿鐨勮窛绂�
+        int rowPadding;
+        /// <summary>
+        /// 绐佸嚭瀹藉害
+        /// </summary>
+        int mTCBJ;
+        public int TCBJ
+        {
+            get
+            {
+                return mTCBJ;
+            }
+            set
+            {
+                mTCBJ = value;
+                rowPadding = mTCBJ + pagePadding;
+                RefreshScrollWidth();
+                ReLocation();
+            }
+        }
+
+        int mScrollWidth;
+        int mPageWidth;
+        private void RefreshScrollWidth()
+        {
+            mScrollWidth = (int)this.RealView.Frame.Width - 2 * rowPadding + pagePadding;
+            mPageWidth = (int)this.RealView.Frame.Width - 2 * rowPadding;
+        }
+
+        /// <summary>
+        /// 鑷姩璁$畻鍒锋柊鎵�鏈塚iew鐨勯珮搴︼紝瀹炵幇缂╂斁鏁堟灉
+        /// </summary>
+        private void RefreshPageView()
+        {
+            //RefreshView();
+            //RefreshViewWithTransform3D();
+            //RefreshViewWithChangeHeight();
+            RefreshViewWithChangeHeightNew();
+            //RefreshViewWithChangeHeightSF();
+        }
+
+        //********************Transform3D 鏃嬭浆鏁堟灉鏂规硶**********************
+        //榛樿25搴�
+        nfloat transformAngle = (nfloat)(25 * Math.PI / 180.0);
+        //鏃嬭浆瑙掑害
+        public int TransformAngle
+        {
+            set
+            {
+                transformAngle = (nfloat)(value * Math.PI / 180.0);
+            }
+        }
+
+        ///// <summary>
+        ///// 鏃嬭浆鏁堟灉
+        ///// </summary>
+        //public void RefreshViewWithTransform3D()
+        //{
+        //    if (ChildrenCount <= 0) return;
+
+        //    if (PageIndex > ChildrenCount - 1)
+        //    {
+        //        PageIndex = ChildrenCount - 1;
+        //    }
+
+        //    // - 鍗曚綅鐭╅樀
+        //    CATransform3D transform = CATransform3D.Identity;
+        //    // - 澧炲姞閫忚鏁堟灉
+        //    transform.m34 = (nfloat)(-1.0 / 500);
+        //    var mRotate = transform.Rotate(0, 0f, 1f, 0f);
+        //    iosUIScrolView.Subviews[PageIndex].Layer.Transform = mRotate;
+
+
+        //    //鍒ゆ柇PageIndex 鍓嶅悗鏄惁鏈塿iew锛屽苟鏃嬭浆
+        //    if (PageIndex - 1 >= 0)
+        //    {
+        //        var mRotate1 = transform.Rotate(transformAngle, 0f, 1f, 0f);
+        //        iosUIScrolView.Subviews[PageIndex - 1].Layer.Transform = mRotate1;
+        //    }
+
+        //    if (PageIndex <= ChildrenCount - 2)
+        //    {
+        //        var mRotate2 = transform.Rotate(-1 * transformAngle, 0f, 1f, 0f);
+        //        iosUIScrolView.Subviews[PageIndex + 1].Layer.Transform = mRotate2;
+        //    }
+
+
+
+
+        //}
+
+        /// <summary>
+        /// 鍒锋柊鏈�澶ц窛绂诲��
+        /// </summary>
+        double MaxDistance;
+    
+
+        private void RefreshViewWithChangeHeight()
+        {
+            if (ChildrenCount <= 0) return;
+
+            if (PageIndex > ChildrenCount - 1)
+            {
+                PageIndex = ChildrenCount - 1;
+            }
+
+            MaxDistance = Width - 2 * TCBJ - JMBJ;
+            double centerX = iosUIScrolView.ContentOffset.X + iosUIScrolView.Frame.Width * 0.5;
+
+            foreach (UIView mSubview in iosUIScrolView.Subviews)
+            {
+
+                double distance = Math.Abs(mSubview.Center.X - centerX);
+                var HH = 0;
+                if (distance <= 0)
+                {
+                    HH = 0;
+                }
+                else if (distance >= MaxDistance)
+                {
+                    HH = JMBJ;
+                }
+                else
+                {
+                    HH = (int)((distance / MaxDistance) * JMBJ);
+
+                }
+                var mFrame = mSubview.Frame;
+                mFrame.Height = Height - HH * 2;
+                mFrame.Y = HH;
+                mSubview.Frame = mFrame;
+
+                //mSubview.MaskView
+
+
+                //double distance = Math.Abs(mSubview.Center.X - centerX);
+                //double factor = 0.01;
+                //float scale = (float)(1.0 / (1 + distance * factor));
+
+                ////var mFrame = mSubview.Frame;
+                ////mFrame.Height = Height * scale;
+                ////mFrame.Y = (Height - mFrame.Height) / 2;
+                ////mSubview.Frame = mFrame;
+
+                //var mFrame = mSubview.Frame;
+                //var HH = (int)(MaxChangeHeight - MaxChangeHeight * scale);
+                //mFrame.Height = Height - HH;
+                //mFrame.Y = HH / 2;
+                //mSubview.Frame = mFrame;
+
+            }
+        }
+
+        /// <summary>
+        /// 鍚屾椂鍒锋柊瀛恦iew 鍜孖mageView鐨勯珮搴︼紝鏆傛椂瑙e喅搴曢儴鍦嗚澶辨晥闂
+        /// </summary>
+        /// <param name="mView"></param>
+        /// <param name="height"></param>
+        void RefreshSubviewHeight(View mView, nfloat height)
+        {
+            try
+            {
+                if (mView is ViewGroup)
+                {
+                    var tempViewGroup = (ViewGroup)mView;
+                    for (int i = 0; i < tempViewGroup.ChildrenCount; i++)
+                    {
+                        if (tempViewGroup.GetChildren(i) is ViewGroup)
+                        {
+                            var tempViewGroup2 = (ViewGroup)tempViewGroup.GetChildren(i);
+                            for (int j = 0; j < tempViewGroup2.ChildrenCount; j++)
+                            {
+                                if (tempViewGroup2.GetChildren(j) is ImageView && tempViewGroup2.GetChildren(j).Tag.ToString() == "R")
+                                {
+
+                                    tempViewGroup2.GetChildren(j).Height = (int)height;
+                                    break;
+                                }
+                            }
+                            if (tempViewGroup2.Tag.ToString() == "R")
+                            {
+                                tempViewGroup2.Height = (int)height;
+                                break;
+                            }
+                        }
+                       
+                    }
+                }
+            }
+            catch { }
+        }
+
+        /// <summary>
+        /// 璁$畻婊戝姩缂╂斁楂樺害鐨勬柟娉�
+        /// </summary>
+        private void RefreshViewWithChangeHeightNew()
+        {
+            if (ChildrenCount <= 0) return;
+
+            if (PageIndex > ChildrenCount - 1)
+            {
+                PageIndex = ChildrenCount - 1;
+            }
+
+            MaxDistance = Width - 2 * TCBJ - JMBJ;
+            double centerX = iosUIScrolView.ContentOffset.X + iosUIScrolView.Frame.Width * 0.5;
+
+            for (int i = 0; i < ChildrenCount; i++)
+            {
+                var mSubview = GetChildren(i).RealView;
+                var view = GetChildren(i);
+                double distance = Math.Abs(mSubview.Center.X - centerX);
+                var HH = 0;
+                if (distance <= 0)
+                {
+                    HH = 0;
+                }
+                else if (distance >= MaxDistance)
+                {
+                    HH = JMBJ;
+                }
+                else
+                {
+                    HH = (int)((distance / MaxDistance) * JMBJ);
+
+                }
+                var mFrame = mSubview.Frame;
+                mFrame.Height = Height - HH * 2;
+                mFrame.Y = HH;
+                mSubview.Frame = mFrame;
+
+                RefreshSubviewHeight(view, mFrame.Height);
+            }
+        }
+
+        //private void RefreshViewWithChangeHeightSF()
+        //{
+        //    if (ChildrenCount <= 0) return;
+
+        //    if (PageIndex > ChildrenCount - 1)
+        //    {
+        //        PageIndex = ChildrenCount - 1;
+        //    }
+
+        //    MaxDistance = Width - 2 * TCBJ - JMBJ;
+        //    double centerX = iosUIScrolView.ContentOffset.X + iosUIScrolView.Frame.Width * 0.5;
+
+        //    foreach (UIView mSubview in iosUIScrolView.Subviews)
+        //    {
+
+        //        double distance = Math.Abs(mSubview.Center.X - centerX);
+        //        nfloat HH = 1;
+        //        if (distance <= 0)
+        //        {
+        //            mSubview.Transform = CGAffineTransform.MakeScale(1.0f, 1.0f);
+        //        }
+        //        else if (distance >= MaxDistance)
+        //        {
+        //            mSubview.Transform = CGAffineTransform.MakeScale(1.0f, 0.8f);
+        //        }
+        //        else
+        //        {
+        //            HH = (nfloat)((1-distance / MaxDistance) * 0.2f) + 0.8f;
+        //            mSubview.Transform = CGAffineTransform.MakeScale(1.0f, 0.8f);
+        //        }
+
+        //    }
+        //}
+
+        /// <summary>
+        /// 鏄惁鍏佽婊戝姩
+        /// </summary>
+        /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value>
+        public bool ScrollEnabled
+        {
+            get
+            {
+                return (iosUIScrolView as MyHorizontalPages).ScrollEnabled;
+            }
+            set
+            {
+                (iosUIScrolView as MyHorizontalPages).ScrollEnabled = value;
+            }
+        }
+
+        int pageIndex;
+        /// <summary>
+        /// 璁剧疆鎴栬�呰幏鍙栧綋鍓嶇殑鐣岄潰绱㈠紩
+        /// </summary>
+        /// <value>The index of the page.</value>
+        public int PageIndex
+        {
+            get
+            {
+                return pageIndex;
+            }
+            set
+            {
+                if (value < 0 || ChildrenCount <= value)
+                {
+                  
+                    return;
+                }
+                int beforePageIndex = pageIndex;
+                pageIndex = value;
+                if (!IsCanRefresh)
+                {
+                    return;
+                }
+
+                var viewSize = iosUIScrolView.Frame.Size;
+
+                RefreshPageView();
+                var rect = new CGRect(pageIndex * viewSize.Width, 0, viewSize.Width, viewSize.Height);
+                if (pageIndex != 0)
+                {
+                    var frame = GetChildren(pageIndex).RealView.Frame;
+                    var w = frame.X - rowPadding;
+
+                    rect = new CGRect(w, 0, viewSize.Width, viewSize.Height);
+                    //Shared.HDLUtils.WriteLine($"CGRect xx-------{w}");
+                }
+
+                //Shared.HDLUtils.WriteLine($"pageIndex xx-------{pageIndex}");
+                iosUIScrolView.ScrollRectToVisible(rect, true);
+
+                if (beforePageIndex != pageIndex)
+                {
+                    bSendPageChange = true;//鍙戦�佹敼鍙樻爣蹇�
+                    if (!isStart)
+                    {
+                        isStart = true;
+                        StartScrollAction?.Invoke();
+                    }
+                }
+                else
+                {
+                    SendEndScrollAction();
+                }
+
+
+            }
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁闇�瑕佸彂閫佺粨鏉熸粦鍔ㄤ簨浠�
+        /// </summary>
+        void SendEndScrollAction() {
+            if (isStart)
+            {
+                isStart = false;
+                EndScrollAction?.Invoke();
+            }
+        }
+
+        bool bSendPageChange = false;
+        /// <summary>
+        /// 鍒ゆ柇鏄惁瑕佸彂閫佹敼鍙樹簨浠�
+        /// </summary>
+        private void SendIfPageChange()
+        {
+            if (bSendPageChange)
+            {
+                bSendPageChange = false;
+                PageChange?.Invoke(this, pageIndex);
+            }
+
+            //鍒ゆ柇鏄惁闇�瑕佸彂閫佺粨鏉熸粦鍔ㄤ簨浠�
+            SendEndScrollAction();
+        }
+
+        bool isScrolling;
+        /// <summary>
+        /// 鏄惁姝e湪婊戝姩
+        /// </summary>
+        public bool ISScrolling
+        {
+            get
+            {
+                return isScrolling;
+            }
+        }
+
+        private void SetIsScrolling(bool bSctolling)
+        {
+            if (isScrolling == bSctolling) return;
+
+            Shared.HDLUtils.WriteLine($"HorizontalPages StartScroll: {bSctolling}");
+            isScrolling = bSctolling;
+        }
+
+        /// <summary>
+        /// 鏄惁姝e湪婊戝姩
+        /// </summary>
+        /// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value>
+        public bool Decelerating
+        {
+            get
+            {
+                return iosUIScrolView.Decelerating;
+            }
+        }
+
+        //public void DelayPageChange()
+        //{
+        //    PageChange?.Invoke(this, pageIndex);
+
+        //    //new System.Threading.Thread(async () =>
+        //    //{
+        //    //    System.Threading.Thread.Sleep(500);
+        //    //    Application.RunOnMainThread(() =>
+        //    //    {
+        //    //        PageChange?.Invoke(this, pageIndex);
+        //    //    });
+        //    //})
+        //    //{ IsBackground = true }.Start();
+        //}
+
+        /// <summary>
+        /// 澧炲姞瀛愭帶浠�
+        /// </summary>
+        /// <param name="view">View.</param>
+        public override void AddChidren(View view)
+        {
+            base.AddChidren(view);
+            ReLocation();
+        }
+
+        /// <summary>
+        /// 閲嶆柊鎺掍綅缃強璁惧鍐呭澶у皬
+        /// </summary>
+        public virtual void ReLocation()
+        {
+            try
+            {
+                if (ChildrenCount == 0)
+                {
+                    return;
+                }
+
+
+                var frame0 = GetChildren(0).RealView.Frame;
+                frame0.X = rowPadding;
+                frame0.Y = 0;
+                frame0.Width = mPageWidth;
+                frame0.Height = iosUIScrolView.Frame.Height;
+                GetChildren(0).RealView.Frame = frame0;
+
+
+
+                for (int i = 1; i < ChildrenCount; i++)
+                {
+                    var frame = GetChildren(i).RealView.Frame;
+
+                    frame.Width = mPageWidth;
+                    frame.Height = iosUIScrolView.Frame.Height;
+                    frame.Y = 0;
+                    //frame.X = iosUIScrolView.Subviews[i - 1].Frame.Right + pagePadding;
+                    frame.X = rowPadding + (mPageWidth + pagePadding) * i;
+                    GetChildren(i).RealView.Frame = frame;
+                }
+                iosUIScrolView.ContentSize = new CoreGraphics.CGSize(GetChildren(ChildrenCount - 1).RealView.Frame.Right + rowPadding, iosUIScrolView.Frame.Height);
+
+                //iosUIScrolView.ContentSize = new CoreGraphics.CGSize(iosUIScrolView.Subviews[ChildrenCount - 1].Frame.Right + rowPadding, iosUIScrolView.Frame.Height);
+
+                if (IsSetLeftAndRightImageView)
+                {
+                    var leftFrame = iosUIScrolView.Subviews[0].Frame;
+                    leftFrame.X = TCBJ - mPageWidth;
+                    leftFrame.Y = JMBJ;
+                    leftFrame.Width = mPageWidth;
+                    leftFrame.Height = Height - JMBJ * 2;
+                    iosUIScrolView.Subviews[0].Frame = leftFrame;
+
+
+                    var rightFrame = iosUIScrolView.Subviews[1].Frame;
+                    rightFrame.X = rowPadding + (mPageWidth + pagePadding) * (ChildrenCount);
+                    rightFrame.Y = JMBJ;
+                    rightFrame.Width = mPageWidth;
+                    rightFrame.Height = Height - JMBJ * 2;
+                    iosUIScrolView.Subviews[1].Frame = rightFrame;
+                }
+
+                RefreshPageView();
+            }
+            catch { }
+        }
+
+
+
+        /// <summary>
+        /// 鎺т欢瀹藉害
+        /// </summary>
+        /// <value>The width.</value>
+        public override int Width
+        {
+            get
+            {
+                return base.Width;
+            }
+            set
+            {
+                base.Width = value;
+
+                if (!IsCanRefresh)
+                    return;
+
+
+            }
+        }
+
+        /// <summary>
+        /// 鎺т欢鐨勯珮搴�
+        /// </summary>
+        /// <value>The height.</value>
+        public override int Height
+        {
+            get
+            {
+                return base.Height;
+            }
+            set
+            {
+                base.Height = value;
+                if (!IsCanRefresh)
+                    return;
+
+            }
+        }
+
+        /// <summary>
+        /// Bounces 
+        /// </summary>
+        public bool Bounces
+        {
+            get
+            {
+                return iosUIScrolView.Bounces;
+            }
+            set
+            {
+                iosUIScrolView.Bounces = value;
+            }
+        }
+
+
+        
+
+        /// <summary>
+        /// 绉婚櫎褰撳墠鎺т欢
+        /// </summary>
+        /// <param name="view">View.</param>
+        internal override void Remove(View view)
+        {
+            base.Remove(view);
+            ReLocation();
+
+            if (PageIndex > ChildrenCount - 1)
+            {
+                PageIndex = ChildrenCount - 1;
+            }
+
+        }
+
+        /// <summary>
+        /// 绉婚櫎鎵�鏈夌殑鎺т欢
+        /// </summary>
+        public override void RemoveAll()
+        {
+            base.RemoveAll();
+            ReLocation();
+            PageIndex = 0;
+        }
+
+        /// <summary>
+        /// 鏍规嵁绱㈠紩绉婚櫎鎺т欢
+        /// </summary>
+        /// <param name="index">Index.</param>
+        public override void RemoveAt(int index)
+        {
+            if (viewList.Count - 1 < index || index < 0)
+            {
+                return;
+            }
+            Remove(viewList[index]);
+        }
+
 
         /// <summary>
         /// 鍨傜洿鏂瑰悜婊氬姩瑙嗗浘
         /// </summary>
         class MyHorizontalPages : UIScrollView
         {
-            nfloat beforeXScrollX;
-            nfloat moveX;
 
-            [Weak]  HorizontalPages HorizontalPages;
-            //nfloat mLastX, mLastY, deltaX;
+            [Weak] HorizontalPages HorizontalPages;
             public MyHorizontalPages(HorizontalPages HorizontalPages)
             {
 
                 this.HorizontalPages = HorizontalPages;
-                //this.ScrollEnabled = false;
-                Scrolled += (s, e) =>
-                {
-                    moveX = this.ContentOffset.X - beforeXScrollX;              
-                };
-
-                DraggingStarted += (sender, e) =>
-                {
-                    beforeXScrollX = this.ContentOffset.X;
-                };
-
-                DecelerationStarted += (s, e) =>
-                {
-                    //var tempUIScrolView = s as MyHorizontalPages;
-                    ////鑾峰彇褰撳墠鐣岄潰鐨勭储寮�
-                    ////System.Console.WriteLine($"DecelerationStarted-------{tempUIScrolView.ContentOffset.X}");
-                    //var tempPageIndex = Convert.ToInt32(tempUIScrolView.ContentOffset.X / (this.HorizontalPages.mScrollWidth));
-                    //this.HorizontalPages.PageIndex = tempPageIndex;
-                    GetMovePageIndex();
-
-                };
-
-                //DecelerationEnded += (s, e) =>
-                //{
-                //    Console.WriteLine("HorizontalPages DecelerationEnded");
-
-                //};
-
-                 DraggingEnded += (s, e) =>
-                {
-                 
-                    var tempUIScrolView = s as MyHorizontalPages;
-                    if (!e.Decelerate)
-                    {
-                        GetMovePageIndex();
-                        ////System.Console.WriteLine($"DraggingEnded-------{tempUIScrolView.ContentOffset.X}");
-                        //var tempPageIndex = Convert.ToInt32(tempUIScrolView.ContentOffset.X / (this.HorizontalPages.mScrollWidth));
-                        //this.HorizontalPages.PageIndex = tempPageIndex;
-                    }
-                };
             }
 
-            private void GetMovePageIndex() {
+            ///// <summary>
+            ///// 鐐瑰嚮寮�濮�
+            ///// </summary>
+            ///// <param name="touches">Touches.</param>
+            ///// <param name="evt">Evt.</param>
+            //public override void TouchesBegan(NSSet touches, UIEvent evt)
+            //{
 
-                if (mTouchSlop < Math.Abs(moveX))
-                {
-                    if (moveX < 0)
-                    {
-                        this.HorizontalPages.PageIndex -= 1;
-                    }
-                    else if (moveX > 0)
-                    {
-                        this.HorizontalPages.PageIndex += 1;
-                    }
-                }
-                else
-                {
-                    this.HorizontalPages.PageIndex = this.HorizontalPages.PageIndex;
-                }
+            //    HorizontalPages?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
 
-            }
+            //}
 
+            //int mTouchSlop = 20;
+            //bool bMove;
+            ///// <summary>
+            /////  绉诲姩
+            ///// </summary>
+            ///// <param name="touches">Touches.</param>
+            ///// <param name="evt">Evt.</param>
+            //public override void TouchesMoved(NSSet touches, UIEvent evt)
+            //{
+            //    HorizontalPages?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this));
 
-            /// <summary>
-            /// 鐐瑰嚮寮�濮�
-            /// </summary>
-            /// <param name="touches">Touches.</param>
-            /// <param name="evt">Evt.</param>
-            public override void TouchesBegan(NSSet touches, UIEvent evt)
-            {
-          
-                HorizontalPages?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
+            //}
+            ///// <summary>
+            ///// 鐐瑰嚮寮硅捣
+            ///// </summary>
+            ///// <param name="touches">Touches.</param>
+            ///// <param name="evt">Evt.</param>
+            //public override void TouchesEnded(NSSet touches, UIEvent evt)
+            //{
+            //    HorizontalPages?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
+            //}
 
-                //CGPoint point = (touches.AnyObject as UITouch).LocationInView(this);
-                ////璁板綍鐐瑰嚮鐨勬渶鏂癤鍧愭爣
-                //mLastX = point.X;
-                //bMove = false;
-                //System.Console.WriteLine($"TouchesBegan-------{mLastX}");
-            }
-
-            int mTouchSlop = 20;
-            bool bMove;
-            /// <summary>
-            ///  绉诲姩
-            /// </summary>
-            /// <param name="touches">Touches.</param>
-            /// <param name="evt">Evt.</param>
-            public override void TouchesMoved(NSSet touches, UIEvent evt)
-            {
-
-
-                HorizontalPages?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this));
-
-                //CGPoint point = (touches.AnyObject as UITouch).LocationInView(this);
-                //deltaX = point.X - mLastX;
-                //if (Math.Abs(deltaX) >= mTouchSlop) {
-                //    bMove = true;
-                //}
-                //System.Console.WriteLine($"deltaX-------{deltaX}");
-        
-            }
-            /// <summary>
-            /// 鐐瑰嚮寮硅捣
-            /// </summary>
-            /// <param name="touches">Touches.</param>
-            /// <param name="evt">Evt.</param>
-            public override void TouchesEnded(NSSet touches, UIEvent evt)
-            {
-                HorizontalPages?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
-
-                //if (bMove)
-                //{
-                //    if (deltaX < 0)//宸︽粦
-                //    {
-                //        this.HorizontalPages.PageIndex--;
-                //    }
-                //    else
-                //    {
-                //        this.HorizontalPages.PageIndex++;
-
-                //    }
-                //}
-            }
-
-            public override void TouchesCancelled(NSSet touches, UIEvent evt)
-            {
-                HorizontalPages?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this));
-            }
+            //public override void TouchesCancelled(NSSet touches, UIEvent evt)
+            //{
+            //    HorizontalPages?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this));
+            //}
             /// <summary>
             /// 妗嗘灦榛樿鍔犱簡涓や釜UIImageView 锛岃繖鏍峰彲浠ュ幓鎺夐粯璁ゆ坊鍔�
             /// </summary>
@@ -182,425 +885,6 @@
                 base.AddSubview(view);
             }
         }
-
-        /// <summary>
-        /// 鏋勯�犲嚱鏁�
-        /// </summary>
-        public HorizontalPages()
-        {
-            viewGroup = new UIView();
-            iosUIScrolView = new MyHorizontalPages(this) {  };  
-            realViewGroup = iosUIScrolView;
-            //鍚姩缈婚〉鍔熻兘
-            //iosUIScrolView.PagingEnabled = true;
-            iosUIScrolView.ShowsHorizontalScrollIndicator = false;
-            viewGroup.AddSubview(iosUIScrolView);
-            _PagePadding = Application.GetRealWidth(50);
-            _RowPadding = Application.GetRealWidth(100);
-            _TCBJ = Application.GetRealWidth(50);
-
-        }
-
-   
-
-        // //涓や釜Page涔嬮棿鐨勮窛绂�
-        //int _PagePadding;
-        //public int PagePadding
-        //{
-        //    get
-        //    {
-        //        return _PagePadding;
-        //    }
-        //    set
-        //    {
-        //        _PagePadding = value;
-        //        ReLocation();
-        //    }
-        //}
-        ////page鐨勫杈硅窛
-        //int _RowPadding;
-        //public int RowPadding
-        //{
-        //    get
-        //    {
-        //        return _RowPadding;
-        //    }
-        //    set
-        //    {
-        //        _RowPadding = value;
-        //        ReLocation();
-        //    }
-        //}
-        /// <summary>
-        /// 绐佸嚭瀹藉害
-        /// </summary>
-        //public int JMBJ
-
-
-        //涓や釜Page鐣岄潰涔嬮棿鐨勮窛绂�
-        int _PagePadding;
-        /// <summary>
-        /// 鐣岄潰涔嬮棿鐨勮竟璺�
-        /// </summary>
-        public int JMBJ
-        {
-            get
-            {
-                return _PagePadding;
-            }
-            set
-            {
-                _PagePadding = value;
-                _RowPadding = _TCBJ + _PagePadding;
-                RefreshScrollWidth();
-                ReLocation();
-            }
-        }
-
-        //page鐨勪笌鎵嬫満灞忓箷鐨勮竟璺� = 绐佸嚭瀹藉害 + 涓や釜Page涔嬮棿鐨勮窛绂�
-        int _RowPadding;
-        /// <summary>
-        /// 绐佸嚭瀹藉害
-        /// </summary>
-        int _TCBJ;
-        public int TCBJ
-        {
-            get
-            {
-                return _TCBJ;
-            }
-            set
-            {
-                _TCBJ = value;
-                _RowPadding = _TCBJ + _PagePadding;
-                RefreshScrollWidth();
-                ReLocation();
-            }
-        }
-
-        int mScrollWidth;
-        int mPageWidth;
-        private void RefreshScrollWidth()
-        {
-            mScrollWidth = (int)this.RealView.Frame.Width - 2 * _RowPadding + _PagePadding;
-            mPageWidth = (int)this.RealView.Frame.Width - 2 * _RowPadding;
-
-        }
-
-
-
-        private void RefreshPageView() {
-            //RefreshView();
-            RefreshViewWithTransform3D();
-        }
-
-        //********************Transform3D 鏃嬭浆鏁堟灉鏂规硶**********************
-        //榛樿25搴�
-        nfloat transformAngle = (nfloat)(25 * Math.PI / 180.0);
-        //鏃嬭浆瑙掑害
-        public int TransformAngle
-        {
-            set
-            {
-                transformAngle = (nfloat)(value * Math.PI / 180.0);
-            }
-        }
-
-        //
-        public void RefreshViewWithTransform3D()
-        {
-            if (iosUIScrolView.Subviews.Length <= 0) return;
-
-            if (PageIndex > iosUIScrolView.Subviews.Length - 1)
-            {
-                PageIndex = iosUIScrolView.Subviews.Length - 1;
-            }
-
-            // - 鍗曚綅鐭╅樀
-            CATransform3D transform = CATransform3D.Identity;
-            // - 澧炲姞閫忚鏁堟灉
-            transform.m34 = (nfloat)(-1.0 / 500);
-            var mRotate = transform.Rotate(0, 0f, 1f, 0f);
-            iosUIScrolView.Subviews[PageIndex].Layer.Transform = mRotate;
-
-
-            //鍒ゆ柇PageIndex 鍓嶅悗鏄惁鏈塿iew锛屽苟鏃嬭浆
-            if (PageIndex - 1 >= 0)
-            {
-                var mRotate1 = transform.Rotate(transformAngle, 0f, 1f, 0f);
-                iosUIScrolView.Subviews[PageIndex - 1].Layer.Transform = mRotate1;
-            }
-
-            if (PageIndex <= iosUIScrolView.Subviews.Length - 2)
-            {
-                var mRotate2 = transform.Rotate(-1 * transformAngle, 0f, 1f, 0f);
-                iosUIScrolView.Subviews[PageIndex + 1].Layer.Transform = mRotate2;
-            }
-
-
-
-    
-        }
-
-        int PaddingHeight = 20;
-        //********************鏅�氶珮搴︽敼鍙樻柟娉�**********************
-        private void RefreshView()
-        {
-            if (iosUIScrolView.Subviews.Length <= 0) return;
-
-            if (PageIndex > iosUIScrolView.Subviews.Length - 1)
-            {
-                PageIndex = iosUIScrolView.Subviews.Length - 1;
-            }
-
-            //System.Console.WriteLine($" tempPageIndex:{PageIndex}");
-            if (PageIndex == 0)
-            {
-                var frame0 = iosUIScrolView.Subviews[0].Frame;
-                frame0.Height = iosUIScrolView.Frame.Height;
-                frame0.Y = 0;
-                iosUIScrolView.Subviews[0].Frame = frame0;
-
-                if (iosUIScrolView.Subviews.Length > 1)
-                {
-                    var frame1 = iosUIScrolView.Subviews[1].Frame;
-                    frame1.Height = iosUIScrolView.Frame.Height - PaddingHeight;
-                    frame1.Y = PaddingHeight/2;
-                    iosUIScrolView.Subviews[1].Frame = frame1;
-                }
-             
-
-
-            }
-            else
-            {
-                var frame0 = iosUIScrolView.Subviews[PageIndex].Frame;
-                frame0.Height = iosUIScrolView.Frame.Height;
-                frame0.Y = 0;
-                iosUIScrolView.Subviews[PageIndex].Frame = frame0;
-
-                var frame = iosUIScrolView.Subviews[PageIndex - 1].Frame;
-                frame.Height = iosUIScrolView.Frame.Height - PaddingHeight;
-                frame.Y = PaddingHeight/2;
-                iosUIScrolView.Subviews[PageIndex - 1].Frame = frame;
-                if (PageIndex <= iosUIScrolView.Subviews.Length - 2)
-                {
-                    var frame1 = iosUIScrolView.Subviews[PageIndex + 1].Frame;
-                    frame1.Height = iosUIScrolView.Frame.Height - PaddingHeight;
-                    frame1.Y = PaddingHeight/2;
-                    iosUIScrolView.Subviews[PageIndex + 1].Frame = frame1;
-                }
-            }
-
-        }
-
-        /// <summary>
-        /// 鏄惁鍏佽婊戝姩
-        /// </summary>
-        /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value>
-        public bool ScrollEnabled
-        {
-            get
-            {
-                return (iosUIScrolView as MyHorizontalPages).ScrollEnabled;
-            }
-            set
-            {
-                (iosUIScrolView as MyHorizontalPages).ScrollEnabled = value;
-            }
-        }
-
-		int pageIndex;
-		/// <summary>
-		/// 璁剧疆鎴栬�呰幏鍙栧綋鍓嶇殑鐣岄潰绱㈠紩
-		/// </summary>
-		/// <value>The index of the page.</value>
-		public int PageIndex
-		{
-			get
-			{
-				return pageIndex;
-			}
-			set
-			{
-                if (value < 0 || ChildrenCount <= value)
-                {
-                    return;
-                }
-                int beforePageIndex = pageIndex;
-				pageIndex = value;
-				if (!IsCanRefresh)
-				{
-					return;
-				}
-              
-				var viewSize = iosUIScrolView.Frame.Size;
-
-                RefreshPageView();
-                var rect = new CGRect(pageIndex * viewSize.Width, 0, viewSize.Width, viewSize.Height);
-                if (pageIndex != 0) {
-                    var frame = iosUIScrolView.Subviews[pageIndex].Frame;
-                    var w = frame.X - _RowPadding;
-
-                    rect = new CGRect(w, 0, viewSize.Width, viewSize.Height);
-                    //System.Console.WriteLine($"CGRect xx-------{w}");
-                }
-
-                //System.Console.WriteLine($"pageIndex xx-------{pageIndex}");
-
-                //Console.WriteLine("HorizontalPages ScrollRectToVisible");
-                iosUIScrolView.ScrollRectToVisible(rect, true);
-
-                if (beforePageIndex != pageIndex)
-                {
-                    //Console.WriteLine("HorizontalPages DelayPageChange");
-                    DelayPageChange();
-                    //PageChange?.Invoke(this, pageIndex);
-                }
-			}
-		}
-
-
-
-        public void DelayPageChange()
-        {
-            new System.Threading.Thread(async () =>
-            {
-                System.Threading.Thread.Sleep(500);
-                Application.RunOnMainThread(() =>
-                {
-                    PageChange?.Invoke(this, pageIndex);
-                });
-            })
-            { IsBackground = true }.Start();
-        }
-
-        /// <summary>
-        /// 澧炲姞瀛愭帶浠�
-        /// </summary>
-        /// <param name="view">View.</param>
-        public override void AddChidren(View view)
-		{
-            //var v = Application.AverageScale;
-            //var vv = Application.CurrentHeight;
-            //var dddd = Application.DesignWidth;
-			base.AddChidren(view);
-			ReLocation();
-		}
-
-		/// <summary>
-		/// 閲嶆柊鎺掍綅缃強璁惧鍐呭澶у皬
-		/// </summary>
-		public virtual void ReLocation()
-		{
-			if (iosUIScrolView.Subviews.Length == 0)
-			{
-				return;
-			}
-
-            var frame0 = iosUIScrolView.Subviews[0].Frame;
-            frame0.X = _RowPadding;
-            frame0.Y = 0;
-            frame0.Width = mPageWidth;
-            frame0.Height = iosUIScrolView.Frame.Height;
-            iosUIScrolView.Subviews[0].Frame = frame0;
-
-
-
-            for (int i = 1; i < iosUIScrolView.Subviews.Length; i++)
-			{
-				var frame = iosUIScrolView.Subviews[i].Frame;
-			
-                frame.Width = mPageWidth;
-                frame.Height = iosUIScrolView.Frame.Height;
-                frame.Y = 0;
-                //frame.X = iosUIScrolView.Subviews[i - 1].Frame.Right + _PagePadding;
-                frame.X = _RowPadding + (mPageWidth + _PagePadding)*i;
-                iosUIScrolView.Subviews[i].Frame = frame;
-			}
-
-			iosUIScrolView.ContentSize = new CoreGraphics.CGSize(iosUIScrolView.Subviews[iosUIScrolView.Subviews.Length - 1].Frame.Right+_RowPadding, iosUIScrolView.Frame.Height);
-            RefreshPageView();
-        }
-
-
-
-		/// <summary>
-		/// 鎺т欢瀹藉害
-		/// </summary>
-		/// <value>The width.</value>
-		public override int Width
-		{
-			get
-			{
-				return base.Width;
-			}
-			set
-			{
-				base.Width = value;
-     
-                if (!IsCanRefresh)
-					return;
-			}
-		}
-
-		/// <summary>
-		/// 鎺т欢鐨勯珮搴�
-		/// </summary>
-		/// <value>The height.</value>
-		public override int Height
-		{
-			get
-			{
-				return base.Height;
-			}
-			set
-			{
-				base.Height = value;
-				if (!IsCanRefresh)
-					return;
-
-			}
-		}
-
-        /// <summary>
-        /// 绉婚櫎褰撳墠鎺т欢
-        /// </summary>
-        /// <param name="view">View.</param>
-        internal override void Remove(View view)
-        {
-            base.Remove(view);
-            ReLocation();
-
-            if (PageIndex > ChildrenCount - 1)
-            {
-                PageIndex = ChildrenCount - 1;
-            }
- 
-        }
-
-		/// <summary>
-		/// 绉婚櫎鎵�鏈夌殑鎺т欢
-		/// </summary>
-		public override void RemoveAll()
-		{
-			base.RemoveAll();
-			ReLocation();
-            PageIndex = 0;
-		}
-
-		/// <summary>
-		/// 鏍规嵁绱㈠紩绉婚櫎鎺т欢
-		/// </summary>
-		/// <param name="index">Index.</param>
-		public override void RemoveAt(int index)
-		{
-            if (viewList.Count - 1 < index || index < 0)
-            {
-                return;
-            }
-            Remove(viewList[index]);
-		}
     }
 }
 

--
Gitblit v1.8.0