【发布时间】:2014-04-23 16:58:13
【问题描述】:
我在 iOS 方面有很多经验,但我是 MacOS 开发的新手。
我正在使用 NSScrollView 滚动 NSView 的自定义子类的多个实例。这个自定义子类有一个自定义的drawRect 实现。所以这个子类的多个实例会同时显示(甚至可以是多达 100 个实例)。
一切正常,但是当我滚动时,我发现它做得不是很顺利。通过在drawRect 实现中放置NSLog() 语句,我很快发现在滚动过程中为每一帧调用它。
我在 iOS 上习惯的是 drawRect 被调用一次,并且内容永远不会重绘,除非你通过调用 setNeedsDisplay 来请求它。
我想通过在滚动期间不让我的自定义 NSView 重绘很多次来提高我的 NSScrollView 的性能,而是记住上次绘制的内容。怎么办?
【问题讨论】:
-
即使不滚动也会调用drawRect吗?这似乎很正常(至少对我而言)我的 NSScrollViews 也是如此。将所有 CPU 密集型代码移出 drawRect 并让它绘制其内容可能会有所帮助。
标签: objective-c macos nsscrollview