using System;
using UIKit;
using CoreGraphics;
using Shared.IO;
using Foundation;
using MJRefresh;
namespace Shared
{
///
/// 位置布局 带下拉刷新
///
public class VerticalRefreshLayout : ViewGroup
{
public Action BeginHeaderRefreshingAction;
//public Action BeginFooterRefreshingAction;
MyRefreshScrolViewLayout mUIScrollView;
public VerticalRefreshLayout()
{
mUIScrollView = new MyRefreshScrolViewLayout(this) { };
viewGroup = mUIScrollView;
realViewGroup = mUIScrollView;
_isCanHeaderRefresh = true;
MJRefreshNormalHeader header = new MJRefreshNormalHeader();
//隐藏提示文字
//header.LastUpdatedTimeLabel.Hidden = true;
//header.StateLabel.Hidden = true;
mUIScrollView.SetMj_header(header);
header.RefreshingBlock = () =>
{
BeginHeaderRefreshingAction?.Invoke();
};
//header.SetTitle(NSBundle_MJRefresh.Mj_localizedStringForKey(NSBundle_MJRefresh.Mj_refreshBundle(NSBundle.MainBundle), "MJRefreshHeaderIdleText"), MJRefreshState.Idle);
//header.SetTitle(NSBundle_MJRefresh.Mj_localizedStringForKey(NSBundle_MJRefresh.Mj_refreshBundle(NSBundle.MainBundle), "MJRefreshHeaderPullingText"), MJRefreshState.Pulling);
//header.SetTitle(NSBundle_MJRefresh.Mj_localizedStringForKey(NSBundle_MJRefresh.Mj_refreshBundle(NSBundle.MainBundle), "MJRefreshHeaderRefreshingText"), MJRefreshState.Refreshing);
//header.AutomaticallyChangeAlpha = true;
}
//private void AddFotterView() {
// MJRefreshAutoNormalFooter footer = new MJRefreshAutoNormalFooter();
// mUIScrollView.SetMj_footer(footer);
// footer.RefreshingBlock = async () =>
// {
// BeginFooterRefreshingAction?.Invoke();
// };
//}
//***************************下拉刷新***************************
///
/// 是否支持下拉刷新
///
bool _isCanHeaderRefresh;
private bool IsCanHeaderRefresh
{
get
{
return _isCanHeaderRefresh;
}
set
{
_isCanHeaderRefresh = value;
}
}
///
/// 头开始刷新
///
public void BeginHeaderRefreshing()
{
if (!IsCanHeaderRefresh) return;
if (!mUIScrollView.Mj_header().Refreshing)
{
mUIScrollView.Mj_header().BeginRefreshing();
}
}
///
/// 头结束刷新
///
public void EndHeaderRefreshing()
{
if (!IsCanHeaderRefresh) return;
if (mUIScrollView.Mj_header().Refreshing)
{
mUIScrollView.Mj_header().EndRefreshing();
}
}
///
/// 是否显示滚动条
///
public bool VerticalScrollBarEnabled
{
get
{
return mUIScrollView.ShowsVerticalScrollIndicator;
}
set
{
mUIScrollView.ShowsVerticalScrollIndicator = value;
}
}
///
/// 垂直方向滚动视图
///
class MyRefreshScrolViewLayout : UIScrollView
{
[Weak] VerticalRefreshLayout _view;
public MyRefreshScrolViewLayout(VerticalRefreshLayout view)
{
this._view = view;
Scrolled += (sender, e) =>
{
this._view?.ScrolledEventHandler?.Invoke(this, new MouseEventArgs { X = (float)(sender as MyRefreshScrolViewLayout).ContentOffset.X, Y = (float)(sender as MyRefreshScrolViewLayout).ContentOffset.Y });
};
}
///
/// 点击开始
///
/// Touches.
/// Evt.
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
_view?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
}
///
/// 移动
///
/// Touches.
/// Evt.
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
_view?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this));
}
///
/// 点击弹起
///
/// Touches.
/// Evt.
public override void TouchesEnded(NSSet touches, UIEvent evt)
{
_view?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
}
public override void TouchesCancelled(NSSet touches, UIEvent evt)
{
_view?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this));
}
///
/// 框架默认加了两个UIImageView ,这样可以去掉默认添加
///
/// View.
public override void AddSubview(UIView view)
{
if (view.GetType() == typeof(UIImageView) && view.Tag != int.MinValue)
{
return;
}
base.AddSubview(view);
}
}
///
/// 增加控件
///
/// 子控件
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 MyRefreshScrolViewLayout).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();
}
///
/// 移除当前视图
///
/// 当前视图
internal 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 (realViewGroup as MyRefreshScrolViewLayout).ScrollEnabled;
// }
// set
// {
// (realViewGroup as MyRefreshScrolViewLayout).ScrollEnabled = value;
// }
//}
/////
///// 是否正在滑动
/////
///// true if decelerating; otherwise, false.
//public bool Decelerating
//{
// get
// {
// return (realViewGroup as MyRefreshScrolViewLayout).Decelerating;
// }
//}
///
/// 滑动事件
///
public EventHandler ScrolledEventHandler;
}
}