我有很多iOS经验,但我是MacOS开发的新手。
我正在使用NSScrollView滚动NSView的自定义子类的多个实例。此自定义子类具有自定义drawRect
实现。因此,一次显示此子类的多个实例(甚至可以最多100个实例)。
一切正常,但当我滚动时,我注意到它没有顺利完成。通过在NSLog()
实现中放置drawRect
语句,我很快发现它在滚动期间被称为每帧。
我在iOS上习惯的是,drawRect
被调用一次,除非您通过调用setNeedsDisplay
提出要求,否则不会重新绘制内容。
我希望通过在滚动期间不要让我的自定义NSView重绘很多次来提高我的NSScrollView的性能,而是记住最后绘制的内容。怎么办呢?
答案 0 :(得分:3)
我想出了一种让它只绘制一次的方法!我现在使用NSImage
来绘制所有内容。我只在模型改变时再次这样做。
buffer = [[NSImage alloc] initWithSize:self.bounds.size];
[buffer lockFocus];
[self drawStuff];
[buffer unlockFocus];
之后,我只是将该图像绘制到屏幕上,显示方式更快。
- (void) drawRect:(NSRect) dirtyRect {
[buffer drawInRect:self.bounds];
}
答案 1 :(得分:2)
它可能'如果您的drawRect性能非常强,请帮助设置[scrollView.contentView setCopiesOnScroll:YES];
。
答案 2 :(得分:-1)
将wantlayer设置为yes。在ios上,默认情况下它是打开的。