(每次学习一点xamarin就做个学习笔记和视频来加深记忆巩固知识)
如有不正确的地方,请帮我指正。
UIScrollView简介
当界面内容很多,一次性显示不了这么多时,可以使用滚动视图控件。
UIScrollView基本使用
A.首先看ContentSize这个属性。
拖一个UIScrollView控件到storyboard,再通过代码添加一个红色的UIView。它们的宽高分别设置如下图:
public override void ViewDidLoad()
{
base.ViewDidLoad();
//------------contentSize属性
UIView redView = new UIView();
redView.BackgroundColor = UIColor.Red;
redView.Frame = new CGRect(0, 0, 80, 80);
this.scrollView1.AddSubview(redView);
this.scrollView1.ContentSize = new CGSize(340, 240);
this.scrollView1.ClipsToBounds = false;//设置不截剪,方便看效果
}
在代码中设置了ContentSize为宽340,高240,那么可滚动范围是这样的,如下图:
可以看出,可以向左滚动的距离是scrollView1.ContentSize的宽340减去scrollView1本身的宽度(即Frame)300,结果为40。向上同理。
如果scrollView1.ContentSize的宽和高 <= scrollView1本身的宽度,那么将不可滚动。
B.再看看AlwaysBounceVertical属性。
有时候没有可滚动的东西,但需要下拉显示一个等待的图标,表示正在刷新,这时就可用这个属性。
注释掉前面的代码,写入如下代码:
//------------alwaysBounceVertical属性
//创建一个等待控件
UIActivityIndicatorView indicator1 = new UIActivityIndicatorView(UIActivityIndicatorViewStyle.WhiteLarge);
indicator1.Center = new CGPoint(100, -20);
indicator1.StartAnimating();
this.scrollView1.AddSubview(indicator1);
this.scrollView1.AlwaysBounceVertical = true;//只是有个弹簧效果,并没有滚动
下拉可看到等待图标,如下图:
C.再看看ContentOffset属性。
注释掉前面的代码,写入如下代码:
//------------contentOffset
UIImage image = UIImage.FromBundle("Tree");
UIImageView imageView1 = new UIImageView(image);
imageView1.Alpha = 0.5F;
this.scrollView1.AddSubview(imageView1);
this.scrollView1.ContentSize = image.Size;
this.scrollView1.ContentOffset = new CGPoint(40, 40);
this.scrollView1.ClipsToBounds = false;
如果没设置ContentOffset = new CGPoint(40, 40),那么默认是下图这样:
如果设置了,则情况如下图:
D.再看看ContentInsert属性。
注释掉前面的代码,写入如下代码:
//------------contentInset内边距
UIImage image = UIImage.FromBundle("Tree");
UIImageView imageView1 = new UIImageView(image);
imageView1.Alpha = 0.5F;
this.scrollView1.AddSubview(imageView1);
this.scrollView1.ContentInset = new UIEdgeInsets(10, 10, 10, 10);
this.scrollView1.ClipsToBounds = false;
this.scrollView1.ContentSize = image.Size;
设置上左下右这四边的内边距为10,运行结果如下图:
E.ScrollView的一些事件
//------------监听UIScrollView事件
UIImage image = UIImage.FromBundle("Tree");
UIImageView imageView1 = new UIImageView(image);
this.scrollView1.AddSubview(imageView1);
this.scrollView1.ClipsToBounds = true;//记得设置栽剪为是,才可以缩放
this.scrollView1.ContentSize = image.Size;
this.scrollView1.MaximumZoomScale = 2.0F;//最大缩放比例为2倍
this.scrollView1.MinimumZoomScale = 0.3F;//最小缩放比例为0.3
//返回要缩放的控件
this.scrollView1.ViewForZoomingInScrollView += (UIScrollView scrollView) =>
{
return imageView1;
};
//缩放时会不断调用此方法
this.scrollView1.DidZoom += (sender, e) =>
{
//Console.WriteLine("scrollView1.DidZoom()");
};
//滚动时会不断调用此方法
this.scrollView1.Scrolled += (sender, e) =>
{
//Console.WriteLine("Scrolled()");
};
//拖动开始时被调用
this.scrollView1.DraggingStarted += (sender, e) =>
{
Console.WriteLine("scrollView1.DraggingStarted()");
};
//拖动完毕之前被调用
this.scrollView1.WillEndDragging += (sender, e) =>
{
Console.WriteLine("scrollView1.WillEndDragging()");
};
//拖动完毕后被调用
this.scrollView1.DraggingEnded += (sender, e) =>
{
Console.WriteLine("scrollView1.DraggingEnded()");
};
//减速完毕后被调用
this.scrollView1.DecelerationEnded += (sender, e) =>
{
Console.WriteLine("scrollView1.DecelerationEnded()");
};
代码和视频在我上传的CSDN资源中http://download.csdn.net/download/junshangshui/10151239