2013-03-15 4 views
6

私は太いトラックを持つUISliderを作ろうとしています。私はthisを試して、それはほとんど動作します。ただし、UISliderが最初に表示されるとき、トラックバーは正常です。タッチイベントが発生した場合にのみ、それはより厚くなります。ここで初めてUISliderを太くするには?

は推奨されているように、私は、UISliderの私のサブクラスに追加されたコードは次のとおりです。

- (CGRect)trackRectForBounds:(CGRect)bounds 
{ 
    return bounds; 
} 

私はこれがどのように動作するか理解していないので、それは完璧に動作していない理由を私は理解することはできません。ここに私の質問があります:

  1. これはどのように機能しますか?
  2. トラックの厚みを制御するにはどうすればよいですか?
  3. UISliderを初めて描画したときに、トラックにどのように影響を与えることができますか?

もちろん、3番目の質問が最も重要ですが、他の質問は私の理解に役立ちます。

考慮すべきもう一つの事:それが最初に表示されたとき、私は親指を隠す:ユーザーがスライダーに触れると

[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal]; 

は、私はこのような親指を表示:

[slider setThumbImage:nil forState:UIControlStateNormal]; 

私はこれが何とかtrackRectForBoundsの魔法を妨害しているのではないかと思うので、これを言及してください。

ありがとうございます!

答えて

4

質問the docs 1.

あなたがトラックの四角形をカスタマイズしたい場合は、この メソッドをオーバーライドして、異なる四角形を返すことができます。返される矩形は、描画中にトラックとサムイメージを拡大/縮小するために使用される です。

このメソッドのデフォルトの実装では、渡されるものよりも小さい矩形が返されます。あなたは、最初にそれを縮小するのではなく、渡されたものを単純に返します。

質問を大きくしたり小さくCGRectは、例えばリターン2:

return CGRectMake(0, 0, 500, 200); 

質問3.は、カスタムイメージを設定していない場合にのみ呼び出されるメソッドであり、私は思います画像をnilに設定するまでは効果がありません。イメージをオーバーライドする場合は、スライダイメージを実際のイメージでオーバーライドして、必要なように見せてください。

+2

美しい - すばらしい答え。質問1の「デフォルトの実装」についてどのように知っていたのか分かりませんが、すべてが説明されています - ありがとう! – Bob

+0

典型的なスタックオーバーフローの応答。 – benjaminhallock

+0

@benjaminhallock私の返答に何が間違っていますか? –

関連する問題