4

範囲が 0 ~ 25 の 284 ピクセル幅の UISlider があります。ユーザーは小数点以下 1 桁 (12.3 など) までの値を選択する必要があります。これは、指を転がすことで慎重に選択できますが、面倒で、指を離すと値が変化する傾向があります。

親指の上または下のスライダーレールをタップすることで、スライダーを 0.1 刻みで上下にインチングできるように調整しようとしています。可能だと確信していますが、これは私の最初の xcode プロジェクトであるため、苦労しています。誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

4

より良い解決策は、UISlider をサブクラス化し、再実装することだと思います

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event

タッチ イベントがスライダーの境界内にある場合は YES を返します。

于 2012-06-26T17:20:29.783 に答える
2

iPhone OS の UISlider コントロールに関する長年の問題は、それを高くすることができないということです。より具体的には、サムとトラックに背の高い画像を指定することで背が高く見えるようにすることができますが、タッチ領域の高さはわずか 23 ピクセルのままです。

UISlider をサブクラス化し、クラスで pointInside をオーバーライドする必要があります。

// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect bounds = self.bounds;
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
    return CGRectContainsPoint(bounds, point);
}

Interface Builder で、新しい UISlider サブクラスを使用するようにスライダーを設定すると、43px のタッチ可能な高さのスライダーが作成されます。

于 2010-07-01T00:10:23.710 に答える
1

いくつかのオプションが思い浮かびます:

  1. 目に見えないボタンを作成し、これらのクリックを受け取るように配置します
  2. UISlider をサブクラス化し、touchesBegan などのメソッドをインターセプトします。位置に基づいてヒットに応答するか、スーパーの関数を呼び出すかを決定します。タッチしている場所を含めるために、フレームを拡張する必要がある場合があります。

非標準 (特に非表示) の実装を作成することが良いアイデアかどうかはわかりませんが、微調整のために可視ボタンを追加することをお勧めします。横にある単純な上向き矢印と下向き矢印が役立つ場合があります。また、UISlider が十分に機能しないことを考えると、UISlider が必要かどうかも検討してください。

于 2010-06-30T20:13:23.193 に答える
0

UISlider の高さは固定されているため、Interface Builder では設定できません。ただし、サム イメージとトラック イメージの値を設定するコードでは、以下に示すようにフレームの高さを設定できます。これにより、タッチに敏感な領域が開きます。

CGRect sliderFrame = self.mySlider.frame;
sliderFrame.size.height = 42.0;
[self.mySlider setFrame:sliderFrame];
于 2011-02-17T08:33:50.967 に答える