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
簡單來講,由於滾動的並非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