using System;
using System.Threading;
using CoreGraphics;
using Foundation;
using UIKit;
namespace Shared
{
public class ProgressLoading : View
{
ProgressLoadingView mProgressLoadingView
{
get
{
return uiView as ProgressLoadingView;
}
set
{
uiView = value;
}
}
public ProgressLoading()
{
mProgressLoadingView = new ProgressLoadingView(this) { };
LoadingBackgroundColor = 0x30696969;
//iosButton.BackgroundColor = UIColor.Clear;
}
Thread mLoadingThead;
bool IsStartLoading;
///
/// 开始Loading线程
///
/// 最小1000ms
public void StartLoading(int mTime = 3000)
{
try
{
if (mTime < 500) mTime = 500;
EndLoading();
mProgressLoadingView.BackgroundColor = mLoadingBackgroundColor;
//Progress = 0;
float PP = 0;
int count = (int)(mTime * 0.01f);
mLoadingThead = new Thread((obj) =>
{
try
{
IsStartLoading = true;
while (PP <= 1 && IsStartLoading)
{
PP = PP + 0.01f;
Application.RunOnMainThread(() =>
{
Progress = PP;
});
Thread.Sleep(count);
}
}
catch
{
}
finally
{
IsStartLoading = false;
Application.RunOnMainThread(() =>
{
Progress = 0;
mProgressLoadingView.BackgroundColor = UIColor.Clear;
SetIsNeedRemove();
});
}
});
mLoadingThead.Start();
}
catch
{
}
}
///
/// 结束Loading
///
void EndLoading()
{
IsStartLoading = false;
if (mLoadingThead != null)
mLoadingThead.Abort();
Progress = 0;
mProgressLoadingView.BackgroundColor = UIColor.Clear;
}
void SetIsNeedRemove()
{
if (IsNeedRemove)
{
this.RemoveFromParent();
}
}
///
/// 结束Loading
///
public void HideLoading()
{
EndLoading();
SetIsNeedRemove();
}
///
/// 刷新布局
///
private void RefreshFrame()
{
(uiView as ProgressLoadingView).InitWithFrameArc(new CoreGraphics.CGRect(base.X, base.Y, base.Width, base.Height));
}
///
/// 控件宽度
///
public override int Width
{
get
{
return base.Width;
}
set
{
base.Width = value;
RefreshFrame();
}
}
///
/// 控件的高度
///
public override int Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
RefreshFrame();
}
}
///
/// 控件的X坐标
///
public override int X
{
get
{
return base.X;
}
set
{
base.X = value;
RefreshFrame();
}
}
///
/// 控件的X坐标
///
public override int Y
{
get
{
return base.Y;
}
set
{
base.Y = value;
RefreshFrame();
}
}
///
/// 当前进度值
///
/// 进度值
public float Progress
{
set
{
mProgressLoadingView.Progress = value;
}
get
{
return mProgressLoadingView.Progress;
}
}
///
/// 当前进度宽
///
/// 进度值
public int ProgressWidth
{
set
{
mProgressLoadingView.ProgressWidth = value;
}
get
{
return (int)mProgressLoadingView.ProgressWidth;
}
}
///
/// 当前进度半径
///
/// 进度值
public int ProgressRadius
{
set
{
mProgressLoadingView.Radius = value;
}
get
{
return (int)mProgressLoadingView.Radius;
}
}
///
/// 进度条颜色
///
/// 单一进度条颜色
public uint ProgressBarColor
{
set
{
mProgressLoadingView.mProgressBarColor = HDLUtils.GetUIColorWithUint(value);
mProgressLoadingView.SetNeedsDisplay();
}
}
UIColor mLoadingBackgroundColor = UIColor.Gray;
///
/// LoadingBackgroundColor
///
/// 背景颜色
public uint LoadingBackgroundColor
{
set
{
mLoadingBackgroundColor = HDLUtils.GetUIColorWithUint(value);
}
}
bool isNeedRemove = true;
public bool IsNeedRemove
{
get
{
return isNeedRemove;
}
set
{
isNeedRemove = value;
}
}
public class ProgressLoadingView : UIKit.UIView
{
///
/// 刷新布局
///
public void InitWithFrameArc(CGRect mCGRect)
{
this.Frame = mCGRect;
}
[Weak] View view;
public ProgressLoadingView(View view)
{
this.view = view;
}
float mProgress = 0.0f;
public UIColor mProgressBarColor = UIColor.White;
public nfloat ProgressWidth = 3;
public nfloat Radius = 15;
public nfloat StartAngle = (nfloat)(-Math.PI * 0.5);
public override void Draw(CGRect rect)
{
base.Draw(rect);
if (isShow && mProgress > 0)
{
CGContext ctx = UIGraphics.GetCurrentContext();
if (ctx == null) return;
ctx.SaveState();
nfloat xCenter = rect.Size.Width * 0.5f;
nfloat yCenter = rect.Size.Height * 0.5f;
//mProgressBarColor.SetStroke();
mProgressBarColor.SetColor();
ctx.SetLineWidth(ProgressWidth);
ctx.SetLineCap(CGLineCap.Round);
nfloat endAngle = (nfloat)(StartAngle + mProgress * Math.PI * 2.0f); // 初始值0.05
ctx.AddArc(xCenter, yCenter, Radius, StartAngle, endAngle, false);
ctx.StrokePath();
ctx.RestoreState();
}
}
bool isShow = true;
public bool IsShow
{
get
{
return isShow;
}
set
{
isShow = value;
SetNeedsDisplay();
}
}
public float Progress
{
get
{
return mProgress;
}
set
{
if (value < 0) value = 0.0f;
if (value > 1) value = 1.0f;
mProgress = value;
SetNeedsDisplay();
}
}
///
/// 点击开始
///
/// 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));
}
}
}
}