我使用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
我會試圖找出它爲什麼被稱爲後臺線程,感謝提示... –