From 1a4b95a7ebef71838bd3eda2c22056bbf0db65ec Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 10 一月 2020 16:39:54 +0800
Subject: [PATCH] 2019阶段备份

---
 Shared.IOS/UI/HorizontalPages.cs |  293 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 263 insertions(+), 30 deletions(-)

diff --git a/Shared.IOS/UI/HorizontalPages.cs b/Shared.IOS/UI/HorizontalPages.cs
index fcee4f2..f891f2a 100644
--- a/Shared.IOS/UI/HorizontalPages.cs
+++ b/Shared.IOS/UI/HorizontalPages.cs
@@ -3,6 +3,7 @@
 using Shared.IO;
 using CoreGraphics;
 using Foundation;
+using CoreAnimation;
 
 namespace Shared
 {
@@ -15,6 +16,7 @@
 
         //readonly UIPageControl iosUIPageControl;
 
+   
         /// <summary>
         /// 椤甸潰鍙樺寲浜嬩欢
         /// </summary>
@@ -25,6 +27,9 @@
         /// </summary>
         class MyHorizontalPages : UIScrollView
         {
+            nfloat beforeXScrollX;
+            nfloat moveX;
+
             [Weak]  HorizontalPages HorizontalPages;
             //nfloat mLastX, mLastY, deltaX;
             public MyHorizontalPages(HorizontalPages HorizontalPages)
@@ -32,29 +37,68 @@
 
                 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 / (tempUIScrolView.Frame.Width - 2 * this.HorizontalPages._RowPadding + this.HorizontalPages._PagePadding));
-                    this.HorizontalPages.PageIndex = tempPageIndex;
+                    //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();
+
                 };
 
-                DraggingEnded += (s, e) =>
-                {
+                //DecelerationEnded += (s, e) =>
+                //{
+                //    Console.WriteLine("HorizontalPages DecelerationEnded");
 
+                //};
+
+                 DraggingEnded += (s, e) =>
+                {
+                 
                     var tempUIScrolView = s as MyHorizontalPages;
                     if (!e.Decelerate)
                     {
-                       
-                        //System.Console.WriteLine($"DraggingEnded-------{tempUIScrolView.ContentOffset.X}");
-                        var tempPageIndex = Convert.ToInt32(tempUIScrolView.ContentOffset.X / (tempUIScrolView.Frame.Width - 2 * this.HorizontalPages._RowPadding + this.HorizontalPages._PagePadding));
-                        this.HorizontalPages.PageIndex = tempPageIndex;
+                        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() {
+
+                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;
+                }
+
+            }
+
+
             /// <summary>
             /// 鐐瑰嚮寮�濮�
             /// </summary>
@@ -153,12 +197,52 @@
             viewGroup.AddSubview(iosUIScrolView);
             _PagePadding = Application.GetRealWidth(50);
             _RowPadding = Application.GetRealWidth(100);
+            _TCBJ = Application.GetRealWidth(50);
 
         }
 
-         //涓や釜Page涔嬮棿鐨勮窛绂�
+   
+
+        // //涓や釜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;
-        public int PagePadding
+        /// <summary>
+        /// 鐣岄潰涔嬮棿鐨勮竟璺�
+        /// </summary>
+        public int JMBJ
         {
             get
             {
@@ -167,28 +251,148 @@
             set
             {
                 _PagePadding = value;
+                _RowPadding = _TCBJ + _PagePadding;
+                RefreshScrollWidth();
                 ReLocation();
             }
         }
-        //page鐨勫杈硅窛
+
+        //page鐨勪笌鎵嬫満灞忓箷鐨勮竟璺� = 绐佸嚭瀹藉害 + 涓や釜Page涔嬮棿鐨勮窛绂�
         int _RowPadding;
-        public int RowPadding
+        /// <summary>
+        /// 绐佸嚭瀹藉害
+        /// </summary>
+        int _TCBJ;
+        public int TCBJ
         {
             get
             {
-                return _RowPadding;
+                return _TCBJ;
             }
             set
             {
-                _RowPadding = value;
+                _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>
         /// 鏄惁鍏佽婊戝姩
@@ -232,7 +436,7 @@
               
 				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;
@@ -243,19 +447,39 @@
                 }
 
                 //System.Console.WriteLine($"pageIndex xx-------{pageIndex}");
-                iosUIScrolView.ScrollRectToVisible(rect, false);
+
+                //Console.WriteLine("HorizontalPages ScrollRectToVisible");
+                iosUIScrolView.ScrollRectToVisible(rect, true);
 
                 if (beforePageIndex != pageIndex)
-                {  
-                    PageChange?.Invoke(this, pageIndex);
+                {
+                    //Console.WriteLine("HorizontalPages DelayPageChange");
+                    DelayPageChange();
+                    //PageChange?.Invoke(this, pageIndex);
                 }
 			}
 		}
-		/// <summary>
-		/// 澧炲姞瀛愭帶浠�
-		/// </summary>
-		/// <param name="view">View.</param>
-		public override void AddChidren(View view)
+
+
+
+        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;
@@ -276,6 +500,9 @@
 
             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;
 
 
@@ -283,12 +510,18 @@
             for (int i = 1; i < iosUIScrolView.Subviews.Length; i++)
 			{
 				var frame = iosUIScrolView.Subviews[i].Frame;
-				frame.X = iosUIScrolView.Subviews[i - 1].Frame.Right+_PagePadding;
-				iosUIScrolView.Subviews[i].Frame = 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();
+        }
 
 
 

--
Gitblit v1.8.0