簡體   English   中英

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

[英]Overriding drawRect:(CGRect)rect in Objective-C (iOS)?

在制作一個簡單的iOS應用程序時,我重寫了drawRect:(CGRect)rect方法。 在我正在閱讀的書中,界限是使用self.bounds定義的,如下所示:

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

    //rest of drawing code here
}

我注意到在書中,該方法的其余部分甚至都沒有使用rect參數並且可以正常工作。 我認為rect將在視圖中設置邊界,因此我嘗試了以下操作:

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

    //rest of drawing code here
}

(顯然,我不會需要做bounds等於rect ,因為我可以直接引用rect的方法中)。我試過兩種方式與他們取得了同樣的結果。 那么self.boundsrect相等嗎? 如果是這樣,我假設使用rect來將當前視圖的邊界設置在幕后某處。 但是,如果不是,那么將rect用作甚至不使用它的方法的參數有什么用? 我是否忽略了明顯的東西?

rect告訴您您需要繪制哪個區域。 它將始終小於或等於self.bounds 根據文檔 (添加重點):

視圖邊界中需要更新的部分。 第一次繪制視圖時,此矩形通常是視圖的整個可見范圍。 但是,在后續的繪圖操作中,矩形可能僅指定視圖的一部分。

如果繪制視圖的細分對您來說效率較低,那么您最好繪制整個視圖。

在實踐中,僅繪制整個內容幾乎絕不是瓶頸,因此大多數人只是按照這樣的規則進行操作:最簡單的代碼是可取的,除非或直到性能需要其他方法為止。

將drawRect編寫為傳遞該方法應該繪制的矩形。 系統可能會決定僅視圖的一部分(也許是因為大多數視圖被另一個視圖覆蓋了)。

如果只需要繪制視圖的一部分,則僅繪制該部分會更快。

正如湯米在輸入答案時所說的那樣,有時候繪制整個視圖有時會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM