我有一个UIView,我导入以显示来自超类的setNeedsDisplay的bezier路径。
一旦UIView完成更新,我需要在超类中调用另一个方法。我在setNeedsDisplay之后调用该方法,但是在UIView完成重绘之前调用该方法。
作为快速修复,我在调用方法前0.3秒创建了NSTimer。这有效,但可能不可靠。我也可以将UIView的通知发回超类,但这似乎不对。
我已检查过文档,但找不到有关完成通知的任何信息。这有什么内置功能吗?
答案 0 :(得分:2)
您可以声明一个新方法
- (void)setNeedsDisplayCompletion:(MYCompletion)completion;
但在此之前声明typedef
typedef void((^MYCompletion)());
然后实现它
- (void)setNeedsDisplayCompletion:(MyCompletion)completion {
self._completion = [completion copy];
[self setNeedsDisplay];
}
然后在drawRect
中使用完成块[super drawRect:rect];
if (self._completion) {
self._completion();
}
P.S。 _completion是一个属性
@property (nonatomic, strong) MyCompletion _completion;
现在您可以使用新方法
[self._uiTextView setNeedsDisplayCompletion:^{
[self setNeedsLayout];
}];
答案 1 :(得分:0)
对不起,如果我的答案有些不正确(我的英语不太好)。 尝试声明您的超级视图的方法谁正在重新加载uiview(使用更奇怪的路径)并更改代码,当您在代码上发布通知时,您将调用该方法。或者只是尝试
[superView performSelectpr:@selector(reloadSubview)];