基本上有兩種方式:
- >使您的視圖的一個子視圖NSScrollView,這當然是最簡單的方法。
- >子類NSScrollView和切換在你做一個-init上重繪每一個變化
某處:
[self addObserver:self forKeyPath:@"contentOffset" withOptions:0 context:@"redraw"];
然後覆蓋此方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == @"redraw") {
[self setNeedsDisplay];
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
這需要你的看法每次更新它的顯示。 drawRect:將被調用,你所需要做的就是繪製這部分視圖。
如果可能,應該堅持第一種方法,因爲它不會每次都重繪,而只是在顯卡上移動預渲染紋理(視圖的CALayer)。但是,如果您的視圖比屏幕大很多,第一種方法會變慢。並且有一個最大尺寸的意見。如果您的內容非常大,則該應用可能會因第一種方法而崩潰。
同意,我打算這樣做。試圖弄清楚如何將滾動封裝到自定義類中,以便外部用戶不必自己創建滾動視圖並自行更新內容大小。 – Bill 2010-08-07 00:08:00
然後爲他們提供完整的軟件包,包括滾動視圖。只是子類uiscrollview。這比重新發明輪子的工作要少。 – mvds 2010-08-07 00:10:38
對,但如果我繼承UIScrollView,drawView不會在滾動上調用。 – Bill 2010-08-07 00:19:27