6

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

推奨されるように、UISlider のサブクラスに追加したコードを次に示します。

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

これがどのように機能するのか理解できないので、なぜ完全に機能しないのかわかりません。ここに私の質問があります:

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

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

考慮すべきもう 1 つの点: 最初に表示されるときは、親指を非表示にします。

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

ユーザーがスライダーに触れると、次のように親指を表示します。

[slider setThumbImage:nil forState:UIControlStateNormal];

これについて言及するのは、それが trackRectForBounds マジックを何らかの形で妨害しているのではないかと思うからです。

ありがとう!

4

1 に答える 1

4

質問1.ドキュメント から:

トラックの四角形をカスタマイズする場合は、このメソッドをオーバーライドして別の四角形を返すことができます。返された四角形は、描画中にトラックとサムの画像をスケーリングするために使用されます。

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

質問 2. より大きなまたはより小さな CGRect を返します。たとえば、次のようになります。

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

質問 3. カスタム イメージを設定しない場合にのみメソッドが呼び出されると思います。そのため、イメージを に設定するまで効果がありませんnil。画像を上書きしたい場合は、希望どおりに見える実際の画像でスライダー画像を上書きしてみてください。

于 2013-03-16T00:55:11.470 に答える