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