我有一个 UIView,我导入它以使用超类中的 setNeedsDisplay 显示贝塞尔路径。
UIView 完成更新后,我需要在超类中调用另一个方法。我在 setNeedsDisplay 之后调用该方法,但是在 UIView 完成重绘之前调用该方法。
作为一个快速修复,我在调用该方法之前用 0.3 秒创建了一个 NSTimer。这有效,但可能不可靠。我还可以将 UIView 的通知发布回超类,但这似乎不对。
我检查了文档,但找不到有关完成通知的任何信息。是否有任何内置功能?
我有一个 UIView,我导入它以使用超类中的 setNeedsDisplay 显示贝塞尔路径。
UIView 完成更新后,我需要在超类中调用另一个方法。我在 setNeedsDisplay 之后调用该方法,但是在 UIView 完成重绘之前调用该方法。
作为一个快速修复,我在调用该方法之前用 0.3 秒创建了一个 NSTimer。这有效,但可能不可靠。我还可以将 UIView 的通知发布回超类,但这似乎不对。
我检查了文档,但找不到有关完成通知的任何信息。是否有任何内置功能?
您可以声明一个新方法
- (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];
}];
抱歉,如果我的回答有些不正确(我的英语不太好)。当您在代码上发布通知时,尝试声明您的超级视图的方法,该方法正在重新加载 uiview(使用 bizier 路径)并更改代码,何时调用该方法。或者只是尝试
[superView performSelectpr:@selector(reloadSubview)];