Question

Mon objectif est de créer un UISlider plus grand avec une hauteur de 35 pixels pour l'image du pouce.

J'ai sous-classé UISlider et ajouté la méthode:

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

Ensuite, je règle l'image thum de mon contrôleur à l'aide de setThumbImage:

Mon pouce le plus gros est bien affiché.

Le problème que j'ai est que la zone de suivi est toujours la même autour de 19 px de hauteur, comment l'étendre à 50?

Merci

T.

Était-ce utile?

La solution

Je pense que vous voudrez peut-être consulter thumbRectForBounds: trackRect: valeur:

Autres conseils

Un problème persistant avec le contrôle UISlider de l'iPhone OS est que vous ne pouvez pas le rendre plus grand. Plus spécifiquement, vous pouvez le rendre plus grand en spécifiant des images plus hautes pour son pouce et son tracé, mais la zone tactile reste aussi petite que 23 pixels.

Michael Patricios a publié un moyen pour que les curseurs par défaut soient beaucoup plus faciles à toucher, et une variante de cette technique peut gérer des curseurs plus grands. Ce que vous devez faire, c'est créer une sous-classe UISlider et remplacer PointInside dans votre classe:

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

Dans Interface Builder, définissez le curseur pour qu'il utilise votre nouvelle sous-classe UISlider. Vous disposez désormais d'un curseur d'une hauteur de 43px.

J'utilise cette solution:)

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

Augmentez la zone touchée par le pouce d’UISlider en augmentant la hauteur du cadre d’UISlider. Cette approche évite tout décalage et toute nécessité ultérieure de corriger le cadre du curseur.

- (void)viewDidLoad{
    [super viewDidLoad];

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top