我正在尝试使用高级 Objective-C 方法。我想要实现的是将特定的绘图代码附加到现有的UIView
.
我很容易开始,我继续drawRect
在一个类别中声明我自己的方法:
@interface UIView (Swizzled)
- (void)my_drawRect:(CGRect)rect;
@end
然后我在类的实现中swizzleddrawRect
方法:UIView
+ (void)load
{
[self swizzleInstanceMethod:@selector(drawRect:) withMethod:@selector(my_drawRect:) inClass:[UIView class]];
}
- (void)my_drawRect:(CGRect)rect
{
NSLog (@"Test.");
}
此方法的实现可在GitHub 上获得,并且在所有其他情况下都可以使用 swizzling。
所以按照逻辑,每次drawRect
被调用,应该只是打印出“Test”。但它不起作用,我调配的方法永远不会被调用。我继续发现我在这里做错了什么,但我越看它,我就越相信问题出在其他地方。
如果drawRect
甚至没有调用该方法怎么办?我继续尝试强制调用它:
view.contentMode = UIViewContentModeRedraw;
[view setNeedsDisplay];
也不行。
所以我的问题是:
如何在这种情况下强制UIView
调用drawRect
,甚至是我的 swizzled 实现?
谢谢!