现在的位置: 首页 > 综合 > 正文

UIScrollView 原理详解

2013年10月30日 ⁄ 综合 ⁄ 共 2019字 ⁄ 字号 评论关闭
转自http://blog.csdn.net/ch_soft/article/details/6947695

ScrollView

      
UIScrollView

    
UIScrollView
为了显示多于一个屏幕的内容或者超过你能放在内存中的内容。

                
Scroll View
为你处理缩小放大手势,UIScrollView实现了这些手势,并且替你处理对于它们的探测和回应。其中需要注意的子类是UITableView以及UITextView(用来显示大量的文字)。还有一个UIWebView,尽管那不是UIScrollView的直接子类,它适用UIScrollView去显示网页内容

       
contentsize
是内容的宽和高,contentsize.width是内容的宽度,contentsize.heght是高度,contentsizeUIScrollView的一个属性,它是一个CGSize,是由核心图形所定义的架构,那定义了你可以滚轴内容的宽度和高度,你也可以添加可以上下滚动的额外区域。第一种方法是你可以通过添加内容的大小来完成。另外一个比较动态的选择是UIScrollView的另一个属性contentInsetcontentInset增加你在contentsize中指定的内容能够滚动的上下左右区域数量contentInset.top以及contentInset.buttom分别表示上面和下面的距离。

           在滚轴视图中,有一个叫做ContentOffset的属性跟踪UIScrollView的具体位置,你能够自己获取和设置它,ContentOffset是你当前可视内容在滚轴视图边界的左上角那个点。如图:


           可以看出,ContentOffset内容中的那个点不是从contentInset的左上角开始的,而是内容的左上角,此时的ContentOffset是正值,但有时也是负值,如下图所示:


使用一个ScrollView

     创建一个UIScrollView

      
      CGRectframe = CGRectMake( 0, 0, 200, 200);

 
            scrollView= [[UIScrollView alloc] initWithFrame: frame];

    添加子视图(框架可以超过scroll
view
的边界)

      
     frame= CGRectMake( 0, 0, 500, 500);

       
    myImageView= [[UIImageView alloc] initWithFrame: frame];

     
     [scrollViewaddSubview:myImageView];

    设置内容尺寸

          
scrollView.contentSize= CGSize(500,500);


扩展Scroll
View 
的行为

      应用程序通常需要知道有关的滚图的事件

           
scrolloffset
改变的时候

           拖动开始和结束

            减速的开始和结束


通过子类化扩展Scroll
View 
的行为

        创建一个子类

        重写一些功能并改变行为

        关于这种方式的争议

               应用程序的逻辑和行为变成了视图本身的一部分,就像,你可能有一些定制的滚轴逻辑,,在那你只在意一个视图控制,但你想在不同地方重复使用你的滚轴视图,如果你必须为每个都子类化,你最后会有很多不同的滚轴视图子类以及在视图中的特定应用逻辑。

              编写很多子类是很沉闷的事情,你最后会有很多无法重复使用的单独视图,而MVC的视图部分的一个重点是视图是可以在不同的控制器和不同的模式之中重复使用的,如果我们把所有逻辑都放在视图中,它减少了可复用性。

              你的代码变得很牢固地配对在一起,它实际上变成了超类的一部分,你无法从UIScrollView中析取它,之后用其它东西代替,如果它在你控制器中且为控制器的一部分,在之后更容易改变它工作的方式和重新安排你应用程序的一些部分。


通过委派来扩展Scroll
View 
的行为(常用的)

         委派是一个单独的对象,协议,定义了委派会实现的一系列功能的Objective-C协议,它创建了一系列很清晰的撤销点,在那里你能定制行为和外观。它在这些对象之间保持了松散的配对,视图本身与视图控制器或任何其它的控制器对象,委派不是滚轴视图的直接子类,它比起牢固配对的子类更加的松散。

首先引用别人分析一篇不错的文章,同时也感谢这位朋友的分享:http://www.cocoachina.com/iphonedev/sdk/2010/1224/2503.html   

抱歉!评论已关闭.