using System;
|
using UIKit;
|
using Shared.IO;
|
using Foundation;
|
|
namespace Shared
|
{
|
/// <summary>
|
/// 位置布局
|
/// </summary>
|
public class HorizontalScrolViewLayout:ViewGroup
|
{
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public HorizontalScrolViewLayout()
|
{
|
viewGroup = new MyHorizontalScrolViewLayout(this) { };
|
realViewGroup = viewGroup;
|
HorizontalScrollBarEnabled = false;
|
}
|
|
/// <summary>
|
/// 垂直方向滚动视图
|
/// </summary>
|
class MyHorizontalScrolViewLayout : UIScrollView
|
{
|
[Weak] internal HorizontalScrolViewLayout horizontalScrolViewLayout;
|
public MyHorizontalScrolViewLayout(HorizontalScrolViewLayout horizontalScrolViewLayout)
|
{
|
this.horizontalScrolViewLayout = horizontalScrolViewLayout;
|
}
|
/// <summary>
|
/// 点击开始
|
/// </summary>
|
/// <param name="touches">Touches.</param>
|
/// <param name="evt">Evt.</param>
|
public override void TouchesBegan(NSSet touches, UIEvent evt)
|
{
|
horizontalScrolViewLayout?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
|
}
|
/// <summary>
|
/// 移动
|
/// </summary>
|
/// <param name="touches">Touches.</param>
|
/// <param name="evt">Evt.</param>
|
public override void TouchesMoved(NSSet touches, UIEvent evt)
|
{
|
horizontalScrolViewLayout?.TouchEvent(EventActions.Move, (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)
|
{
|
horizontalScrolViewLayout?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
|
}
|
|
public override void TouchesCancelled(NSSet touches, UIEvent evt)
|
{
|
horizontalScrolViewLayout?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this));
|
}
|
/// <summary>
|
/// 框架默认加了两个UIImageView ,这样可以去掉默认添加
|
/// </summary>
|
/// <param name="view">View.</param>
|
public override void AddSubview(UIView view)
|
{
|
if (view.GetType() == typeof(UIImageView) && view.Tag != int.MinValue)
|
{
|
return;
|
}
|
base.AddSubview(view);
|
}
|
}
|
|
/// <summary>
|
/// 增加子视图
|
/// </summary>
|
/// <returns>The chidren.</returns>
|
/// <param name="view">View.</param>
|
public override void AddChidren(View view)
|
{
|
base.AddChidren(view);
|
ReLocation();
|
}
|
|
/// <summary>
|
/// 重新排位置及设备内容大小
|
/// </summary>
|
public virtual void ReLocation()
|
{
|
if (0 == viewList.Count)
|
{
|
return;
|
}
|
for (int i = 1; i < viewList.Count; i++)
|
{
|
var frame = viewList[i].RealView.Frame;
|
frame.X = viewList[i - 1].RealView.Frame.Right;
|
viewList[i].RealView.Frame = frame;
|
}
|
|
(realViewGroup as MyHorizontalScrolViewLayout).ContentSize = new CoreGraphics.CGSize(viewList[viewList.Count - 1].Right <= Width ? Width + 1 : viewList[viewList.Count - 1].Right,0);
|
}
|
|
|
/// <summary>
|
/// 移除所有的视图
|
/// </summary>
|
public override void RemoveAll()
|
{
|
base.RemoveAll();
|
ReLocation ();
|
}
|
|
/// <summary>
|
/// 移除控件
|
/// </summary>
|
/// <param name="view">View.</param>
|
internal override void Remove(View view)
|
{
|
base.Remove(view);
|
ReLocation ();
|
}
|
|
|
/// <summary>
|
/// 移除指定索引对象
|
/// </summary>
|
/// <param name="index">Index.</param>
|
public override void RemoveAt(int index)
|
{
|
base.RemoveAt(index);
|
ReLocation ();
|
}
|
|
/// <summary>
|
/// 是否允许滑动
|
/// </summary>
|
/// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value>
|
public bool ScrollEnabled
|
{
|
get
|
{
|
return (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled;
|
}
|
set
|
{
|
(viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled = value;
|
}
|
}
|
|
/// <summary>
|
/// 是否正在滑动
|
/// </summary>
|
/// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value>
|
public bool Decelerating
|
{
|
get
|
{
|
return (viewGroup as MyHorizontalScrolViewLayout).Decelerating;
|
}
|
}
|
|
/// <summary>
/// 是否显示水平滚动条
/// </summary>
|
|
public bool HorizontalScrollBarEnabled
|
{
|
get
{
return (viewGroup as MyHorizontalScrolViewLayout).ShowsHorizontalScrollIndicator;
}
|
set
|
{
|
(viewGroup as MyHorizontalScrolViewLayout).ShowsHorizontalScrollIndicator = value;
|
|
}
|
}
|
}
|
|
|
}
|