UIScrollView内のUIViewのDrawメソッドで描画する

四角や丸やらをUIViewに直接描画しつつ、それをUIScrollViewでスクロールさせようとして四苦八苦した。
構成は単純で

UIWindow
└UIScrollView
 └CustomView : UIView

こんなかんじ。
CustomView(UIView)のオーバライドしたDrawメソッド内で四角や丸やらを描画したとき、残像が残ったりDrawメソッド内の処理が無視されてまったくなにも描画されないという症状が発生した。
本家SDKやblogをみると、どうやらOpaqueとBackgroundColorの組み合わせに制限があることが判った。
結局以下のようにすることで症状を回避できた。

  • UIScrollViewのOpaqueはTrueに。
  • CustomView(UIView)のOpaqueはTrueに。
  • CustomView(UIView)のBackgroundColorはUIColor.Clearに。
  • UIScrollViewのScrolledイベントでCustomView(UIView)のSetNeedsDisplay()を呼ぶ。