10

私の目標は、親指の画像の高さが35ピクセルのより大きなUISliderを作成することです。

UISliderをサブクラス化し、メソッドを追加しました:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

次に、setThumbImageを使用してコントローラーからthumイメージを設定します。

私の大きな親指はよく表示されます。

私が抱えている問題は、追跡ゾーンが高さ約19ピクセルで同じであるということですが、それを50に拡張するにはどうすればよいですか?

ありがとう

T。

4

4 に答える 4

31

iPhone OSのUISliderコントロールの長年の問題は、背を高くすることができないことです。具体的には、親指とトラックに背の高い画像を指定することで背を高く見せることができますが、タッチ領域の高さは23ピクセルのままです。

Michael Patriciosは、デフォルトのスライダーをより簡単にタッチできるようにする方法を公開しました。その手法のバリエーションは、より大きなスライダーを処理できます。あなたがする必要があるのは、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:01:03.653 に答える
11

私はこのソリューションを使用しています:)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];
于 2012-05-30T23:00:31.617 に答える
9

UISliderフレームの高さを増やすことにより、UISliderサムヒット領域を増やします。このアプローチにより、オフセットとそれに続くスライダーフレームの修正の必要性が回避されます。

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
于 2013-07-22T21:41:22.837 に答える
0

I believe that you may want to look at thumbRectForBounds:trackRect:value:

于 2010-04-30T19:37:08.360 に答える