2

我有一个 UIView,我导入它以使用超类中的 setNeedsDisplay 显示贝塞尔路径。

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

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

我检查了文档,但找不到有关完成通知的任何信息。是否有任何内置功能?

4

2 回答 2

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();
}

PS _completion 是一个属性

@property (nonatomic, strong) MyCompletion _completion;

现在你可以使用你的新方法了

[self._uiTextView setNeedsDisplayCompletion:^{
    [self setNeedsLayout];
}];
于 2014-11-21T13:32:41.607 回答
0

抱歉,如果我的回答有些不正确(我的英语不太好)。当您在代码上发布通知时,尝试声明您的超级视图的方法,该方法正在重新加载 uiview(使用 bizier 路径)并更改代码,何时调用该方法。或者只是尝试

[superView performSelectpr:@selector(reloadSubview)];
于 2013-08-18T12:34:04.090 回答