setNeedsDisplayInRect 小议

-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了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值