Ida*_*dan 18 iphone cocoa-touch nsview drawrect
我找不到一个体面的答案来解释我这两个功能之间的区别.每个人什么时候被召唤,一个人与另一个人有什么不同?
例如,我不能只是将我的视图布局在drawrect中吗?
谢谢
tc.*_*tc. 57
-layoutSubviews-layoutIfNeeded如果设置了"layout needed"标志(使用-setNeedsLayout,或者在视图边界发生变化时自动调用),则调用from .用它来定位你的视图 [ 编辑:用它来定位子视图 ].
-drawRect:-displayIfNeeded如果设置了"需要显示"标志(使用-setNeedsDisplay,或者如果设置则自动设置view.contentMode = UIViewContentModeRedraw),则调用.
这两个-layoutIfNeeded和-displayIfNeeded的事情被吸引到屏幕前,会自动的UIKit/CoreAnimation调用; 你很少需要直接打电话给他们.
您可以在子视图中定位-drawRect:(甚至可以添加子视图!),但这是不明智的:
-setNeedsDisplay不会在边界更改时自动调用.-drawRect:降低了性能(UIKit/CoreAnimation必须为您创建一个支持位图的图形上下文); 只有在需要执行自定义绘图时才这样做.-drawRect:.绘图很贵.移动视图很便宜.编辑:当我醒来时还有一些细节:
"显示"和"抽奖"有什么区别?显示是通过-[CALayer display]; 默认实现是(近似)
-displayLayer:,请致电 [self.delegate displayLayer:self].-displayLayer:应该设置layer.content为(例如)CGImage,-drawLayer:inContext:,设置一个位图支持的上下文,调用[self.delegate drawLayer:self inContext:context]并保存输出layer.content(输出实际上是一个CABackingStore,可能是一个私有API)layer.content.视图是图层的委托,所以你可以实现-[MyView displayLayer:],并做一些有趣的事情
self.layer.contents = (id)([UIImage imageNamed:@"foo"].CGImage) (这大致与UIImageView的作用相同)| 归档时间: |
|
| 查看次数: |
6311 次 |
| 最近记录: |