using System;
|
using UIKit;
|
using CoreAnimation;
|
|
|
namespace Shared
|
{
|
/// <summary>
|
/// 当前视图
|
/// </summary>
|
public class Spinner : Button
|
{
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public Spinner ()
|
{
|
TextColor = 0xff007aff;
|
BorderWidth = 1;
|
Radius = 10;
|
MouseUpEventHandler += (sender1, e1) => {
|
if (AdapterStr == null || AdapterStr.Length == 0)
|
{
|
return;
|
}
|
UIScrollView tempUIScrollView = new UIScrollView();
|
tempUIScrollView.BackgroundColor = UIColor.Clear;
|
var frame2 = tempUIScrollView.Frame;
|
frame2.Width = Application.CurrentWidth;
|
frame2.Height = Application.CurrentHeight;
|
tempUIScrollView.Frame = frame2;
|
tempUIScrollView.Alpha = 0.94f;
|
UITapGestureRecognizer gestureRecognizer = new UITapGestureRecognizer(() =>
|
{
|
remoteFromSuperview(tempUIScrollView);
|
});
|
tempUIScrollView.AddGestureRecognizer(gestureRecognizer);
|
|
int height = 40;
|
|
var size = tempUIScrollView.ContentSize;
|
size.Width = Application.CurrentWidth;
|
size.Height = height * AdapterStr.Length;
|
tempUIScrollView.ContentSize = size;
|
size.Width = 20;
|
size.Height = 20;
|
for (int i = 0; i < AdapterStr.Length; i++)
|
{
|
UIButton button = new UIButton();
|
var tempButtonFrame = button.Frame;
|
tempButtonFrame.Y = (int)Math.Max(tempUIScrollView.Frame.Height, tempUIScrollView.ContentSize.Height) - (height * (i + 1));
|
tempButtonFrame.Width = Application.CurrentWidth;
|
tempButtonFrame.Height = height;
|
button.Frame = tempButtonFrame;
|
button.SetTitle(AdapterStr[i], UIControlState.Normal);
|
button.SetTitleColor(new UIColor(0x6d / 255.0f, 0x6d / 255.0f, 0x72 / 255.0f, 1), UIControlState.Normal);
|
button.BackgroundColor = UIColor.White;
|
button.Tag = i;
|
button.TouchUpInside += (sender, ee) =>
|
{
|
remoteFromSuperview(tempUIScrollView);
|
Text = AdapterStr[button.Tag];
|
if (SelectedItemChanged != null)
|
{
|
SelectedItemChanged(this, (int)button.Tag);
|
}
|
};
|
tempUIScrollView.AddSubview(button);
|
|
if (i == this.AdapterStr.Length - 1)
|
{
|
|
UIBezierPath uIBezierPath = UIBezierPath.FromRoundedRect(button.Bounds, UIRectCorner.TopLeft | UIRectCorner.TopRight, size);
|
|
CAShapeLayer cAShapeLayer = new CAShapeLayer();
|
cAShapeLayer.Frame = button.Bounds;
|
cAShapeLayer.Path = uIBezierPath.CGPath;
|
button.Layer.Mask = cAShapeLayer;
|
|
}
|
else {
|
|
UIView line = new UIView();
|
var ddd = line.Frame;
|
ddd.Y = button.Frame.Y;
|
ddd.Width = Application.CurrentWidth;
|
ddd.Height = 1;
|
line.Frame = ddd;
|
|
line.BackgroundColor = new UIColor(0xdd / 255.0f, 0xdd / 255.0f, 0xdd / 255.0f, 1);
|
tempUIScrollView.AddSubview(line);
|
|
if (i == 0)
|
{
|
UIBezierPath uIBezierPath = UIBezierPath.FromRoundedRect(button.Bounds, UIRectCorner.BottomLeft | UIRectCorner.BottomRight, size);
|
CAShapeLayer cAShapeLayer = new CAShapeLayer();
|
cAShapeLayer.Frame = button.Bounds;
|
cAShapeLayer.Path = uIBezierPath.CGPath;
|
button.Layer.Mask = cAShapeLayer;
|
}
|
}
|
}
|
var frame = tempUIScrollView.Frame;
|
frame.Y = Application.CurrentHeight;
|
tempUIScrollView.Frame = frame;
|
Application.RootFrameLayout.AddSubview(tempUIScrollView);
|
|
UIView.AnimateNotify(0.6f, 0.01f, UIViewAnimationOptions.CurveLinear, () =>
|
{
|
frame.Y = 0;
|
tempUIScrollView.Frame = frame;
|
}, null);
|
};
|
}
|
|
void remoteFromSuperview(UIScrollView uIScrollView)
|
{
|
UIView.AnimateNotify(0.6f,0.01f,UIViewAnimationOptions.CurveLinear,() => {
|
var frame= uIScrollView.Frame ;
|
frame.Y=Application.CurrentHeight;
|
uIScrollView.Frame=frame;
|
},(b)=>{
|
if(b)
|
{
|
uIScrollView.RemoveFromSuperview();
|
}
|
});
|
|
}
|
|
/// <summary>
|
/// 刷新当前视图
|
/// </summary>
|
public override void Refresh()
|
{
|
base.Refresh();
|
CurrentRow = currentRow;
|
}
|
|
|
|
int currentRow;
|
/// <summary>
|
///
|
/// </summary>
|
/// <value>The current row.</value>
|
public int CurrentRow
|
{
|
get
|
{
|
return currentRow;
|
|
}
|
set
|
{
|
if (AdapterStr == null || value < 0 || AdapterStr.Length <= value)
|
{
|
return;
|
}
|
|
currentRow = value;
|
Text = AdapterStr[value];
|
}
|
}
|
|
|
/// <summary>
|
/// 添加下拉列表的数据
|
/// </summary>
|
/// <param name="Str">String.</param>
|
public string []AdapterStr {
|
get;
|
set ;
|
}
|
|
/// <summary>
|
/// 选择列表变化的事件
|
/// </summary>
|
public Action<View, int> SelectedItemChanged;
|
|
}
|
|
|
}
|