UIView的drawRect在旋转时不被调用



我正在试验高级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上可用,swizzling在所有其他情况下都可以工作。

因此,根据逻辑,每次调用drawRect时,它应该只打印出"Test"。但它不起作用,我搅拌的方法永远不会被调用。我继续寻找我在这里做错了什么,但是我越看越觉得问题出在别的地方。

如果drawRect方法甚至没有被调用怎么办?我继续尝试强制它被称为:

view.contentMode = UIViewContentModeRedraw;
[view setNeedsDisplay];

也不行

我的问题是:

如何强制UIView调用drawRect在这种情况下,甚至我的swizzed实现?

谢谢!

首先,读取drawRect或不drawRect(何时应该使用drawRect/Core Graphics vs subviews/images,为什么?)

基本上,UIView检查是否覆盖drawRect:。如果你不重写它,它可以做很多绘图优化,甚至不会调用该方法。

在本例中,您没有覆盖它,因此UIView认为没有理由调用它,即使您用其他内容替换空实现。

相关内容

  • 没有找到相关文章

最新更新