[UIView setNeedsDisplay]:有没有一种简单的方法可以知道drawRect何时完成?

时间:2013-08-18 12:14:46

标签: ios objective-c uiviewcontroller uiviewanimation-curve

我有一个UIView,我导入以显示来自超类的setNeedsDisplay的bezier路径。

一旦UIView完成更新,我需要在超类中调用另一个方法。我在setNeedsDisplay之后调用该方法,但是在UIView完成重绘之前调用该方法。

作为快速修复,我在调用方法前0.3秒创建了NSTimer。这有效,但可能不可靠。我也可以将UIView的通知发回超类,但这似乎不对。

我已检查过文档,但找不到有关完成通知的任何信息。这有什么内置功能吗?

2 个答案:

答案 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)];