xamarin学习笔记B05(ios的UIScrollView)

(每次学习一点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;//最大缩放比例为2this.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

猜你喜欢

转载自blog.csdn.net/junshangshui/article/details/78753006