• UIScrollView


     

    UIScrollView对滑动和缩放提供原生支持,API使用也非常方便

    最简单的用法

    只要初始化UIScrollView,然后设置contentSize,再放入subview,就可以了。例:

        UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:rect];  
        scroll.contentSize = CGSizeMake(width, height);  
        [scroll addSubview: subview];  

    为什么内容无法滚动

    在so和各种论坛上最常见的问题,就是为什么ScrollView无法滚动,一般都是因为没有设置contentSize,或者contentSize比UIScrollView自身的bound更小

    基本上可以这么理解:UIScrollView是一个容器,其中放了subview。如果contentSize比UIScrollView的 size还要小,那么不需要滚动就能一屏显示全,所以就不会产生滚动条。实际上,滚动的不是UIScrollView自己,而是它所容纳的subview

    为什么drawRect中用CoreGraphics画的图形无法滚动

    简单来说,因为滚动的并不是UIScrollView,而是它的content view也就是subview。如果CoreGraphics直接画在UIScrollView上就不能滚动,而是要画在subview上

    下面是一个错误的例子片段:

        @interface LosLineChart : UIScrollView  
          
        @end  
          
        @implementation  
          
        -(void) drawRect  
        {  
            UILabel *label;  
            [self addSubview:label];  
          
            CGContextRef context = UIGraphicsGetCurrentContext();  
            CGContextMoveToPoint(context, anchorPoint.x, anchorPoint.y);  
            CGContextAddLineToPoint(context, anchorPoint.x, anchorPoint.y + maxHeight);  
            CGContextStrokePath(context);  
        }  
          
        @end  

    上面的代码,LosLineChart自身就是ScrollView的实例,然后label是它的subview,因此label是可滚动的。而直线是直接画在LosLineChart上的,所以无法滚动

    正确的做法应该是:

        UIScrollView *scroll;  
        LosLineChart *chart;  
          
        scroll.contentSize = CGSizeMake(width, height);  
        [scroll addSubview:chart];   

    LosLineChart本身不是ScrollView,而是放进ScrollView里,这样用CG画的图形,也就可以滚动了。总之就是记住一句话:滚动的不是UIScrollView,而是它的subview

  • 相关阅读:
    smarty-2014-02-28
    PHP Functions
    Zabbix自定义监控网站服务是否能够正常响应
    Zabbix自定义监控网站服务是否能够正常响应
    shell技巧
    shell技巧
    ansible安装配置zabbix客户端
    ansible安装配置zabbix客户端
    shell命令getopts
    shell命令getopts
  • 原文地址:https://www.cnblogs.com/allanliu/p/4254066.html
Copyright © 2020-2023  润新知