isOpaqueには、true?false?
やっと、少し理解できたのでメモ。
Swift3になって、opaqueからisOpaqueになって、
Xcodeに言われるがままに修正を済ませて、さっそく落とし穴に。。。
isOpaqueはtrueの方がパフォーマンスが良い(*1)と聞いて、
ずーっと、trueにしていました。
でもって、今まで問題は起きてなかったので。
で、さっそく問題が。
オレオレUIStepper(ボツ案)のプロトタイプを作ってみたのですが、
CATextLayerのstringプロパティを書き換えると、
直前の描画に重ねて描画されるようになり、何かがおかしい・・・。

あれやこれや試して、
drawメソッドをoverrideしてclearしてもだめで、
もしやと思って、isOpaqueをfalseにしたら、
意図したような結果が得られました。
今まで問題が起きてなかったのは、
起動時にセットした文字列、もしくは画像はそれ以降、変更してなくて、
その背景色や枠線だけ、変更していたこと。
あと、文字の表示にはUILabelを使っていて、
UILabelのisOpaqueはfalseになっていたため、
問題が起きていなかっただけでした。
もし似たような現象が起きたら、isOpaqueを疑いましょう。
(コード上で生成した)UIViewのisOpaqueのデフォルト値はtrueとのことです。
CALayerのisOpaqueのデフォルト値はfalseでした。
おしまい。
(*1) パフォーマンスは良いが、推奨されているわけでもない
Leave a Comment