メソッドでUIViewサイズを取得するには、self.bound
を使用しています。しかし、今、XCodeの9で、私はこの警告を得る:drawRectのUIViewサイズを取得する方法
メインスレッドチェッカー:バックグラウンドスレッドで呼ばれるUIのAPI: - [UIViewの 境界]
取得するための正しい方法は何ですかdrawRect
方法のビューサイズ?このよう
メソッドでUIViewサイズを取得するには、self.bound
を使用しています。しかし、今、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
私はバックグラウンドスレッドでなぜヒントのために呼び出されたのか把握しようとします... –