isOpaqueには、true?false?

やっと、少し理解できたのでメモ。

Swift3になって、opaqueからisOpaqueになって、
Xcodeに言われるがままに修正を済ませて、さっそく落とし穴に。。。

isOpaquetrueの方がパフォーマンスが良い(*1)と聞いて、
ずーっと、trueにしていました。
でもって、今まで問題は起きてなかったので。

で、さっそく問題が。

オレオレUIStepper(ボツ案)のプロトタイプを作ってみたのですが、
CATextLayerstringプロパティを書き換えると、
直前の描画に重ねて描画されるようになり、何かがおかしい・・・。

 

あれやこれや試して、
drawメソッドをoverrideしてclearしてもだめで、
もしやと思って、isOpaquefalseにしたら、
意図したような結果が得られました。

今まで問題が起きてなかったのは、
起動時にセットした文字列、もしくは画像はそれ以降、変更してなくて、
その背景色や枠線だけ、変更していたこと。
あと、文字の表示にはUILabelを使っていて、
UILabelisOpaquefalseになっていたため、
問題が起きていなかっただけでした。

もし似たような現象が起きたら、isOpaqueを疑いましょう。
(コード上で生成した)UIViewisOpaqueのデフォルト値はtrueとのことです。
CALayerisOpaqueのデフォルト値はfalseでした。

おしまい。

(*1) パフォーマンスは良いが、推奨されているわけでもない

Leave a Comment