UIScrollView

 

UIScrollView對滑動和縮放提供原生支持,API使用也很是方便spa

最簡單的用法

只要初始化UIScrollView,而後設置contentSize,再放入subview,就能夠了。例:code

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

 

 

爲何內容沒法滾動

在so和各類論壇上最多見的問題,就是爲何ScrollView沒法滾動,通常都是由於沒有設置contentSize,或者contentSize比UIScrollView自身的bound更小blog

基本上能夠這麼理解:UIScrollView是一個容器,其中放了subview。若是contentSize比UIScrollView的 size還要小,那麼不須要滾動就能一屏顯示全,因此就不會產生滾動條。實際上,滾動的不是UIScrollView本身,而是它所容納的subviewit

爲何drawRect中用CoreGraphics畫的圖形沒法滾動

簡單來講,由於滾動的並非UIScrollView,而是它的content view也就是subview。若是CoreGraphics直接畫在UIScrollView上就不能滾動,而是要畫在subview上io

下面是一個錯誤的例子片斷:class

    @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上的,因此沒法滾動容器

正確的作法應該是:scroll

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

LosLineChart自己不是ScrollView,而是放進ScrollView裏,這樣用CG畫的圖形,也就能夠滾動了。總之就是記住一句話:滾動的不是UIScrollView,而是它的subviewim

相關文章
相關標籤/搜索