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