[英]UIView's drawRect not being called when swizzled
我正在嘗試使用先進的Objective-C方法。 我想要實現的是將特定的繪圖代碼附加到現有的UIView
。
我很容易地開始,我繼續在一個類別中聲明我自己的drawRect
方法:
@interface UIView (Swizzled)
- (void)my_drawRect:(CGRect)rect;
@end
然后我在類別的實現中調整了UIView
的drawRect
方法:
+ (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.