我使用self.bound
来获取drawRect
方法中的UIView大小。但是现在,随着XCode的9,我得到这样的警告:如何在drawRect中获取UIView大小
主线程检查器:UI API称为后台线程: - [UIView的 界]
什么是获得正确的方式在drawRect
方法中查看大小?
我使用self.bound
来获取drawRect
方法中的UIView大小。但是现在,随着XCode的9,我得到这样的警告:如何在drawRect中获取UIView大小
主线程检查器:UI API称为后台线程: - [UIView的 界]
什么是获得正确的方式在drawRect
方法中查看大小?
像这样:
override func drawRect(rect: CGRect)
let bds = DispatchQueue.main.sync {
return self.bounds
}
// ....
}
但事实上,drawRect
被要求摆在首位后台线程是一个不好的征兆 - 除非你使用CATiledLayer或其他一些内置的架构,做这个。您首先应该担心的是即。
我在这个视图中使用CATiledLayer,所以这是正常的drawRect在后台调用。 –
好,如果你看看我的评论和我的回答,那正是我要求你确认的内容!在那种情况下,是的,这是解决问题的方法。事实证明,我们一直在做这件事,只有现在,主线检查器才会出现并将我们击倒。它已经证明它的价值! – matt
您认为在drawRect中执行同步操作会减慢绘图速度吗?你认为如何重写layoutSubviews并将其大小保存为类成员? –
我终于找到了解决问题的办法。我现在首要的UIView layoutSubviews
保持视图边界的类成员:
- (void)layoutSubviews
{
[super layoutSubviews];
m_SelfBounds = self.bounds;
}
在那之后,我只是在drawRect
方法使用m_SelfBounds
。
试着派发主线程。 – Lumialxk
我会试图找出它为什么被称为后台线程,感谢提示... –