簡體   English   中英

當旋轉時,UIView的drawRect沒有被調用

[英]UIView's drawRect not being called when swizzled

我正在嘗試使用先進的Objective-C方法。 我想要實現的是將特定的繪圖代碼附加到現有的UIView

我很容易地開始,我繼續在一個類別中聲明我自己的drawRect方法:

@interface UIView (Swizzled)

- (void)my_drawRect:(CGRect)rect;

@end

然后我在類別的實現中調整了UIViewdrawRect方法:

+ (void)load
{
    [self swizzleInstanceMethod:@selector(drawRect:) withMethod:@selector(my_drawRect:) inClass:[UIView class]];
}

- (void)my_drawRect:(CGRect)rect
{
    NSLog (@"Test.");
}

GitHub上提供了這種方法的實現,並且在所有其他情況下都可以使用這種方法。

所以根據邏輯,每次調用drawRect ,都應該打印出“Test”。 但它不起作用,我調用的方法從未被調用過。 我接着發現了我在這里做錯了什么,但是我看的越多,我就越相信問題就在其他地方。

如果甚至沒有調用drawRect方法怎么辦? 我接着試着強迫它被召喚:

view.contentMode = UIViewContentModeRedraw;
[view setNeedsDisplay];

也不起作用。

所以我的問題是:

在這種情況下如何強制UIView調用drawRect甚至是我的混合實現?

謝謝!

首先,讀取drawRect或不讀取drawRect(何時應該使用drawRect / Core Graphics vs subviews / images以及為什么?)

基本上, UIView檢查你是否覆蓋drawRect:或不。 如果不覆蓋它,它可以進行大量的繪圖優化,甚至不會調用該方法。

在這種情況下,您沒有覆蓋它,因此UIView認為沒有理由調用它,即使您用其他東西替換了空實現。

暫無
暫無

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

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