Frage

Mein Ziel ist es, eine größere UISlider mit 35 Pixel Höhe für den Daumen Bild zu erstellen.

I subclassed UISlider und hinzugefügt, um die Methode:

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

Dann habe ich das Thum Bild von meinem Controller setThumbImage:

Mein größerer Daumen gut angezeigt.

Das Problem, das ich habe ist, dass die Tracking-Zone noch um 19 px Höhe das gleiche ist, wie es auf 50 zu verlängern?

Danke

T.

War es hilfreich?

Lösung

Ich glaube, dass Sie bei thumbRectForBounds:trackRect:value: aussehen mögen

Andere Tipps

Ein seit langem bestehende Problem mit dem UISlider Kontrolle ‚iPhone OS ist, dass Sie es größer nicht machen können. Genauer gesagt, können Sie es durch die Angabe größer Bilder für seine Daumen und Spur größer aussehen, aber der Touch-Bereich bleibt als winziges 23px hoch.

Michael Patricios hat einen Weg veröffentlicht die Standard-Schieber viel leichter zu berühren, und eine Variation dieser Technik können größere Schieber handhaben. Was Sie tun müssen, ist, Unterklasse UISlider und außer Kraft setzen pointInside in Ihrer Klasse:

// 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);
}

In Interface Builder, stellen Sie den Schieberegler, um neue UISlider Unterklasse zu verwenden, und Sie haben jetzt einen Schieber mit einer 43px berührbaren Höhe.

Ich bin mit dieser Lösung:)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];

UISlider Daumen Trefferfläche erhöhen, indem die Höhe des UISlider Rahmen zu erhöhen. Dieser Ansatz vermeidet Offset- und daraus folgende Notwendigkeit die Slider Rahmen zu korrigieren.

- (void)viewDidLoad{
    [super viewDidLoad];

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top