2017-08-15 21 views
1

私は、ユーザが自由にUIBezierPathを描画できる「描画ビュー」を含むUIScrollViewを持っています。それはCATiledLayerを使用するので、私はぼかしなしでズームすることができます。CATiledLayerを使用して翻訳中にUIBezierPathを描画するときのEXC_BAD_ACCESS

パスを描画するとき、ストロークが何度も呼び出されているにもかかわらず、EXC_BAD_ACCESSエラーはありません。しかし、CGAffineTransFormを使用してパスを変換すると、パスがストロークされたときにEXC_BAD_ACCESSエラーがスローされるまでに数秒もかかりません。また、視覚的に経路でアーチファクトを作成します。

私はCATiledLayerを使用しなくても何の問題もないので、翻訳が好きではないというCATiledLayerと関係していると確信しています。パスはアーティファクトなしで期待どおりに変換されるからです。しかし、ぼやけなくズームするにはCATiledLayerが必要です(contentcalefactorをズームレベルに設定する以外の方法はありません)。

エラーがスローされたときのメモリ/ CPU使用率は異常ではありません。

私はiOS 11とXcode 9のベータ版を使用しています。 (編集:iOS 10でも起こりますが、同じXcode 9 Betaを使用しています)

ゾンビオブジェクトを有効にしようとしましたが、有用な情報を提供していません。

+0

あなたのコードは秘密ですか? – matt

答えて

0

CATiledLayerは、複数のスレッドを使用してコンテンツを描画します。多くのUIKit操作はメインスレッドから行う必要があります。タイルレイヤーの利点を維持する最善の方法は、UIKitパスの代わりにコアグラフィックパスを使用することです。 Technical Q&A 1637も参照してください。

+0

私はCGPathを描こうとしました。これは翻訳時にはうまく動作しますが、EXC_BAD_ACCESSを使用して縮尺を変えたり回転させたりすると、stilがクラッシュします – user3290287

+0

コードなしでは、誰も手伝ってくれません。 – clemens

関連する問題