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 次 |
最近记录: |