2016-04-17 3 views
-1

CIFilterを使用してUIImageを作成し、UIImageViewに追加します。この画像を作成するプロセスはとても速く、画像ビューに追加することができます。しかし、UI全体がフィルタリングされた画像を表示するまで数秒間フリーズします。 CIFilterの呼び出しが高速であることを確認しました。私は遅いがUIImageViewによってイメージをレンダリングすることが原因だと思う。イメージが既に作成されていると、なぜそんなに遅いのですか?以下は画像のフィルタを作るためのコードです。CIFilterを使用して画像を作成すると、iOSでレンダリングが非常に遅くなる

上記のメソッドの呼び出しはバックグラウンドスレッドで発生し、次にblowメソッドを使用してスクロールビューに追加します。

dispatch_async(dispatch_get_main_queue(), { 
      self.filterScrollView.addSubview(uiView) 
     }) 

私は "self.filterScrollView.addSubview(のUIView)" をコメントアウトした場合、UIはスムーズに動作します。イメージをレンダリングするのに時間がかかるのはなぜですか?具体的には、シミュレータ上で発生します。これは、デバイス上で実行するとはるかに高速に動作します。

答えて

0

しかし全体のUIは、それがフィルタリングされた画像

が表示されるまで、この種の問題は、あなたがUIImageViewのimageを設定する方法は、(あなたの質問には示されていないことを示唆している数秒間フリーズです)がバックグラウンドスレッドで呼び出されています。あなたはそれをしてはいけません。

+0

私はこの2つのメソッドをバックグラウンドスレッドで呼び出します。また、メインスレッドでのみaddSubViews()を呼び出します。しかし、それはまだUIをブロックします。 addSubView()のメソッド呼び出しがUIをブロックしているようです。 UI上でレンダリングする理由が既に生成されている画像にこのような長い時間がかかると、私は理解しません。 –

+0

メインスレッドでのみ 'addSubview'を呼び出す場合は、バックグラウンドスレッドのイメージビューに対して他のことをしています。私はそれをするのではないと言っています。あなたはこの質問に実際に重要なコードをすべて隠し続けるので、私はあなたにもっと具体的な助けを与えることはできません... – matt

関連する問題