using System; using UIKit; using CoreGraphics; using Shared.IO; using Foundation; namespace Shared { /// /// 位置布局,已经全面检查 /// public class VerticalScrolViewLayout : ViewGroup { /// /// 构造函数 /// public VerticalScrolViewLayout() { viewGroup = new MyUIScrolView(this); realViewGroup = viewGroup; (viewGroup as MyUIScrolView).Scrolled += (sender, e) => { if (ScrolledEventHandler != null) { ScrolledEventHandler(this, new MouseEventArgs { X = (float)(sender as MyUIScrolView).ContentOffset.X, Y = (float)(sender as MyUIScrolView).ContentOffset.Y }); } }; } /// /// 增加控件 /// /// 子控件 public override void AddChidren(View view) { base.AddChidren(view); ReLocation(); } /// /// 重新排位置及设备内容大小 /// public virtual void ReLocation() { if (0 == viewList.Count) { return; } var frame1 = viewList[0].RealView.Frame; frame1.Y = 0; viewList[0].RealView.Frame = frame1; for (int i = 1; i < viewList.Count; i++) { var frame = viewList[i].RealView.Frame; frame.Y = viewList[i - 1].RealView.Frame.Bottom; viewList[i].RealView.Frame = frame; } (realViewGroup as MyUIScrolView).ContentSize = new CoreGraphics.CGSize(0, viewList[viewList.Count - 1].Bottom <= Height ? Height + 1 : viewList[viewList.Count - 1].Bottom); } /// /// 移除所有的视图 /// public override void RemoveAll() { base.RemoveAll(); ReLocation(); } /// /// 移除当前视图 /// /// 当前视图 public override void Remove(View view) { base.Remove(view); ReLocation(); } /// /// 移除指定索引 /// /// 索引 public override void RemoveAt(int index) { base.RemoveAt(index); ReLocation(); } /// /// 是否允许滑动 /// /// true if scroll enabled; otherwise, false. public bool ScrollEnabled { get { return (viewGroup as MyUIScrolView).ScrollEnabled; } set { (viewGroup as MyUIScrolView).ScrollEnabled = value; } } /// /// 是否正在滑动 /// /// true if decelerating; otherwise, false. public bool Decelerating { get { return (viewGroup as MyUIScrolView).Decelerating; } } /// /// 滑动事件 /// public event EventHandler ScrolledEventHandler; } /// /// 垂直方向滚动视图 /// class MyUIScrolView : UIScrollView { View _view; /// /// 构造函数 /// /// 对外的实际视图 public MyUIScrolView(View view) { _view = view; } /// /// 点击开始 /// /// Touches. /// Evt. public override void TouchesBegan(NSSet touches, UIEvent evt) { //base.TouchesBegan(touches, evt); if (_view == null) return; var touch = touches.AnyObject as UITouch; _view.TouchEvent(EventActions.Down, touch.LocationInView(this)); } /// /// 移动 /// /// Touches. /// Evt. public override void TouchesMoved(NSSet touches, UIEvent evt) { //base.TouchesMoved(touches, evt); if (_view == null) return; var touch = touches.AnyObject as UITouch; _view.TouchEvent(EventActions.Move, touch.LocationInView(this)); } /// /// 点击弹起 /// /// Touches. /// Evt. public override void TouchesEnded(NSSet touches, UIEvent evt) { //base.TouchesEnded(touches, evt); if (_view == null) return; var touch = touches.AnyObject as UITouch; _view.TouchEvent(EventActions.Up, touch.LocationInView(this)); } /// /// 框架默认加了两个UIImageView ,这样可以去掉默认添加 /// /// View. public override void AddSubview(UIView view) { if (view.GetType() == typeof(UIImageView) && view.Tag != int.MinValue) { return; } base.AddSubview(view); } } }