表示された結果は、UISlider
(他の多くのコントロールの中でも) 実際には、描画自体を処理する複数のサブクラスで構成されているという事実に基づいています。drawRect:
結果は高度に最適化された表示コードであり、のみを使用して適切にオーバーライドすることはできませんUISlider
。その構成されたコントロールの他のいくつかの部分的に閉じられた実装をオーバーライドする必要があります。
実際、カスタマイズしたいグラフィック要素を提供する、はるかに簡単でパフォーマンスの高いソリューションがありますUISlider
。この主題に関する優れた紹介は、Apple のSlidersの概念紹介にあります。
ただし、いくつかの小さな落とし穴があります。その 1 つは、UISlider
親指が別のサイズのものに置き換えられることを「好まない」という事実です。ただし、これらは多くのチュートリアルでカバーされています。そのうちの 1 つはhow-to-make-a-custom-uisliderです。
経験則としてdrawRect:
、UI のパフォーマンスが大幅に低下するため、サブクラス化とオーバーライドは可能な限り避けてください。
UIAppearance
代わりに、カスタマイズ用のインターフェイスを提供しないコントロールのプロトコルを利用するソリューションを検討してください。UISlider
ただし、それらを提供するので、それらを使用してください。
これは私のアプローチの優先リストです。
- 問題のコントロールが画像などを提供してカスタマイズできるかどうかを慎重に確認してください。
- 問題のコントロールが
UIAppearance
プロトコルに準拠しているかどうかを確認します。
- サブクラス化とオーバーライドの使用
drawRect:
- 問題のコントロールが
drawRect:
「奇妙な」方法で処理されているように見える場合UIView
は、欠落しているロジックを自分でサブクラス化して再作成します。