より大きなUISliderは問題ありませんが、トラッキングゾーンの問題
質問
私の目標は、サム画像用に高さ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。
解決
thumbRectForBounds:trackRect:value:
他のヒント
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のタッチ可能な高さのスライダーができました。
このソリューションを使用しています:)
CGRect sliderFrame = self.mySlider.frame;
sliderFrame.size.height = 142.0;
[self.mySlider setFrame:sliderFrame];
UISliderフレームの高さを増やすことにより、UISliderのサムヒット領域を増やします。このアプローチにより、オフセットが回避され、その後スライダーフレームを修正する必要がなくなります。
- (void)viewDidLoad{
[super viewDidLoad];
//expand slider hit area
self.slider.frame = CGRectInset(self.slider.frame, 0, -10);
}
所属していません StackOverflow