2017-09-04 110 views
1

我使用self.bound來獲取drawRect方法中的UIView大小。但是現在,隨着XCode的9,我得到這樣的警告:如何在drawRect中獲取UIView大小

主線程檢查器:UI API稱爲後臺線程: - [UIView的 界]

什麼是獲得正確的方式在drawRect方法中查看大小?

+0

試着派發主線程。 – Lumialxk

+0

我會試圖找出它爲什麼被稱爲後臺線程,感謝提示... –

回答

4

像這樣:

override func drawRect(rect: CGRect) 
    let bds = DispatchQueue.main.sync { 
     return self.bounds 
    } 
    // .... 
} 

但事實上,drawRect被要求擺在首位後臺線程是一個不好的徵兆 - 除非你使用CATiledLayer或其他一些內置的架構,做這個。您首先應該擔心的是

+0

我在這個視圖中使用CATiledLayer,所以這是正常的drawRect在後臺調用。 –

+1

好,如果你看看我的評論和我的回答,那正是我要求你確認的內容!在那種情況下,是的,這是解決問題的方法。事實證明,我們一直在做這件事,只有現在,主線檢查器纔會出現並將我們擊倒。它已經證明它的價值! – matt

+0

您認爲在drawRect中執行同步操作會減慢繪圖速度嗎?你認爲如何重寫layoutSubviews並將其大小保存爲類成員? –

4

我終於找到了解決問題的辦法。我現在首要的UIView layoutSubviews保持視圖邊界的類成員:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    m_SelfBounds = self.bounds; 
} 

在那之後,我只是在drawRect方法使用m_SelfBounds