在Objective-C(iOS)中覆盖drawRect:(CGRect)rect?

aan*_*nrv 0 objective-c uiview bounds ios

drawRect:(CGRect)rect在制作简单的iOS应用程序时,我重写了该方法.在我正在阅读的书中,界限的定义self.bounds如下所示:

- (void)drawRect:(CGRect)rect
{
    CGRect bounds = self.bounds;

    //rest of drawing code here
}
Run Code Online (Sandbox Code Playgroud)

我注意到在书中,该方法的其余部分甚至没有使用该rect参数并且工作正常.我假设rect会在视图中设置边界,所以我尝试了以下内容:

- (void)drawRect:(CGRect)rect
{
    CGRect bounds = rect;

    //rest of drawing code here
}
Run Code Online (Sandbox Code Playgroud)

(显然,我甚至不需要bounds等同于rect因为我可以rect在方法中直接引用.)我尝试了两种方式并且它们产生了相同的结果.那么,self.boundsrect平等的吗?如果是,我假设rect用于在幕后某处设置当前视图的边界.但如果它们不是,那么rect作为一个甚至不使用它的方法的参数有什么用呢?我忽略了一些明显的东西吗

Tom*_*mmy 5

rect告诉你需要绘制哪个区域.它总是小于或等于self.bounds.根据文件(重点增加):

视图边界的一部分需要更新.第一次绘制视图时,此矩形通常是视图的整个可见边界.但是,在后续绘制操作期间,矩形可能只指定视图的一部分.

如果你绘制视图的细分效率较低,那么你也可以绘制整个视图.

在实践中,仅仅绘制整个事物绝不是瓶颈所以大多数人只是按照规则来做到这一点,即最简单的代码是优选的,除非或直到性能需要不同的方法.