2017-09-04 10 views
1

メソッドでUIViewサイズを取得するには、self.boundを使用しています。しかし、今、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を使用しています。

関連する問題