setNeedsDisplayInRect 小议
来源:互联网 发布:淘宝购物车不能用 编辑:程序博客网 时间:2024/06/06 10:40
-setNeedsDisplayInRect: 确实可以做到将receiver的指定区域mark成dirty,然后在导致对该区域的重绘。
但是如果我对LZ的需求没有理解错的话,LZ是希望自己不指定的区域压根就不被绘制出来。当且仅当调用了某个方法以后,这个区域才把数据绘制出来。
假定我的理解没有错误,-setNeedsDisplayInRect: 是没有办法满足这种需求的。
因为-setNeedsDisplayInRect:仅仅只是mark了程序员已知的dirty区域,但是NSWindow本身还会根据view的层次结构、clip关系,为每个view算出一个最终的redraw区域,然后作为参数发给drawRect:。这个区域一般来说是你-setNeedsDisplayInRect:所指定区域的超集。因此当NSWindow认为你整个view都需要重绘的时候,-setNeedsDisplayInRect:满足不了你的需求。
在这种情况下,我建议LZ自己维护一个或一组NSRect的ivar,然后在-drawRect:里做intersection测试。例如,当-drawRect:传进来的NSRect和你的ivar NSRect做intersection测试成功的时候,允许执行绘图的代码,不然的话就return了。
但是如果我对LZ的需求没有理解错的话,LZ是希望自己不指定的区域压根就不被绘制出来。当且仅当调用了某个方法以后,这个区域才把数据绘制出来。
假定我的理解没有错误,-setNeedsDisplayInRect: 是没有办法满足这种需求的。
因为-setNeedsDisplayInRect:仅仅只是mark了程序员已知的dirty区域,但是NSWindow本身还会根据view的层次结构、clip关系,为每个view算出一个最终的redraw区域,然后作为参数发给drawRect:。这个区域一般来说是你-setNeedsDisplayInRect:所指定区域的超集。因此当NSWindow认为你整个view都需要重绘的时候,-setNeedsDisplayInRect:满足不了你的需求。
在这种情况下,我建议LZ自己维护一个或一组NSRect的ivar,然后在-drawRect:里做intersection测试。例如,当-drawRect:传进来的NSRect和你的ivar NSRect做intersection测试成功的时候,允许执行绘图的代码,不然的话就return了。
- setNeedsDisplayInRect 小议
- iOS UIView的drawRect方法 - setNeedsDisplay和setNeedsDisplayInRect.
- 小议auto_ptr
- 小议static
- 接口小议
- 小议auto_ptr
- 小议“转载”
- 小议HashMap
- 小议泡茶
- 小议HashMap
- API小议
- 小议PushbackInputStream
- 小议static
- 小议算法
- sizeof小议
- 小议static
- return小议
- 小议ODT
- 拿ipython当shell用
- android 中使用socket使native和framework通信
- GridPanel中的loadMask在页面第一次加载不显示的问题
- 读完云风的"那些日子"的一些感想
- Hive 安装
- setNeedsDisplayInRect 小议
- 排序算法--希尔排序C++实现
- 企业即时通讯 智能教学利器
- android中颜色值参考
- linux内核调度策略的修改对内核线程的影响
- C++标准转换运算符reinterpret_cast
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)
- 排序算法--选择排序C++实现
- hibernate 配置参数详解