Iphone drawrect Vs LayoutSubView-NSView-Cocoa touch

Iphone drawrect Vs LayoutSubView-NSView-Cocoa touch,iphone,cocoa-touch,nsview,drawrect,Iphone,Cocoa Touch,Nsview,Drawrect,我找不到合适的答案来解释这两个函数之间的区别。 每个人什么时候都会接到电话,一个和另一个有何不同 例如,我不能在drawrect中布局我的视图吗 谢谢也许我没有所有的答案,但我可以告诉你: -更改图幅时调用layoutSubviews -调用setNeedDisplay时调用drawRect 大多数情况下,您不会使用LayoutSubView 可能还有其他情况,但它可以给你一个第一个答案^^ 祝您好运-layoutSubviews是从-layoutifneedd调用的,如果设置了“需要布局”标志

我找不到合适的答案来解释这两个函数之间的区别。 每个人什么时候都会接到电话,一个和另一个有何不同

例如,我不能在drawrect中布局我的视图吗


谢谢

也许我没有所有的答案,但我可以告诉你: -更改图幅时调用layoutSubviews -调用setNeedDisplay时调用drawRect

大多数情况下,您不会使用LayoutSubView

可能还有其他情况,但它可以给你一个第一个答案^^


祝您好运

-layoutSubviews
是从
-layoutifneedd
调用的,如果设置了“需要布局”标志(使用
-setNeedsLayout
,或者在视图边界更改时自动调用)。使用它定位视图[编辑:使用它定位子视图]

如果设置了“需要显示”标志(使用
-setNeedsDisplay
,或者如果设置了
view.contentMode=UIViewContentModeRedraw
),则从
-display
调用

UIKit/CoreAnimation在将事物绘制到屏幕之前自动调用
-layoutifneed
-displayIfNeeded
;你很少需要直接给他们打电话

您可以在
-drawRect:
中定位子视图(甚至可以添加子视图!),但这是不明智的:

  • 默认情况下,边界更改时不会自动调用
    -setNeedsDisplay
  • 实现
    -drawRect:
    会降低性能(UIKit/CoreAnimation必须为您创建位图支持的图形上下文);仅当需要执行自定义图形时才执行此操作
  • 您需要在
    -drawRect:
    中重新绘制视图。画画很贵。移动视图很便宜
  • UIKit/CoreAnimation可能先执行布局过程,然后执行绘图过程。CoreAnimation可以使用布局信息来决定需要绘制哪些视图(例如,它可以忽略被不透明子视图、屏幕外视图或clipsToBounds=YES视图边界外的子视图遮挡的视图;或者它只能绘制大视图的子矩形)。如果在绘制过程中移动视图,CoreAnimation可能无法正确绘制视图
编辑:以及我醒着时的更多细节:

“显示”和“绘制”有什么区别?显示由
-[CALayer display]
完成;默认实现是(大约)

  • 如果层的代理响应
    -displayLayer:
    ,请调用
    [self.delegate displayLayer:self]
    <代码>-显示层:
应该设置
层。内容
为(例如)CGImage
  • 否则,如果层的委托响应
    -drawLayer:inContext:
    ,则设置位图支持的上下文,调用
    [self.delegate drawLayer:self inContext:context]
    ,并将输出保存到
    层.content
    (输出实际上是一个CABackingStore,它可能是一个私有API)
  • 否则,不要更改层内容
  • 视图是层的委托,因此您可以实现
    -[MyView displayLayer:
    ,并执行以下有趣的操作

    • self.layer.contents=(id)([UIImage-imagename:@“foo”].CGImage)
      (这大致就是UIImageView的功能)
    • 无操作,以防止任何“绘图”。如果您已经对UIToolbar进行了子类化,并希望为其提供透明的背景,那么这可能很有用。(这也会阻止创建CGContext/CABackingStore。)
    • 在不影响性能的情况下移动子视图(但出于上述原因,这仍然不是一个好主意)

    请详细说明“大多数情况下,您不会使用布局子视图”的说法