From af4101b1d8461331bc3163b738fc75d4bf67c85c Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 28 七月 2020 17:47:44 +0800
Subject: [PATCH] 2020-07-28-1
---
Shared.IOS/UI/HorizontalPages.cs | 1151 +++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 834 insertions(+), 317 deletions(-)
diff --git a/Shared.IOS/UI/HorizontalPages.cs b/Shared.IOS/UI/HorizontalPages.cs
index fcee4f2..938bc33 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
{
@@ -13,113 +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
{
- [Weak] HorizontalPages HorizontalPages;
- //nfloat mLastX, mLastY, deltaX;
+
+ [Weak] HorizontalPages HorizontalPages;
public MyHorizontalPages(HorizontalPages HorizontalPages)
{
this.HorizontalPages = HorizontalPages;
- //this.ScrollEnabled = false;
-
- 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;
- };
-
- 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;
- }
- };
- }
- /// <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));
-
- //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)
- {
+ ///// <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));
- 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));
+ //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));
- //if (bMove)
- //{
- // if (deltaX < 0)//宸︽粦
- // {
- // this.HorizontalPages.PageIndex--;
- // }
- // else
- // {
- // this.HorizontalPages.PageIndex++;
+ //}
+ ///// <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));
+ //}
- // }
- //}
- }
-
- 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>
@@ -138,236 +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);
-
- }
-
- //涓や釜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>
- /// <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;
-
-
- 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}");
- iosUIScrolView.ScrollRectToVisible(rect, false);
-
- if (beforePageIndex != pageIndex)
- {
- PageChange?.Invoke(this, pageIndex);
- }
- }
- }
- /// <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;
- iosUIScrolView.Subviews[0].Frame = frame0;
-
-
-
- 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;
- }
-
- iosUIScrolView.ContentSize = new CoreGraphics.CGSize(iosUIScrolView.Subviews[iosUIScrolView.Subviews.Length - 1].Frame.Right+_RowPadding, iosUIScrolView.Frame.Height);
- }
-
-
-
- /// <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