10
votes

Plus gros uislider ok mais problème de la zone de suivi

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

i sous-classée uislider et ajouté la méthode: xxx

puis je règle le Thum Image de mon contrôleur à l'aide de Setthummimage:

Mon gros pouce est bien affiché.

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

merci

t.


0 commentaires

4 Réponses :


0
votes

Je pense que vous voudrez peut-être regarder THUMBRRREDFORDS: Trackrect: valeur:


2 commentaires

Malheureusement, Uislider n'utilise pas le retour de cette fonction pour déterminer la région tactile du curseur pouce.


Comment appeler la méthode Thumbrrederbounds, est-ce la méthode de déléguée UISLIDER?



31
votes

Un problème de longue date avec le contrôle de l'uislider iPhone OS est que vous ne pouvez pas le rendre plus grand. Plus précisément, vous pouvez le faire paraître plus grand en spécifiant des images plus hautes pour son pouce et sa piste, mais la zone tactile reste comme un minuscule 23px hauteur.

Michael Patricios a publié un moyen pour que les curseurs par défaut plus faciles à toucher et une variation de cette technique peut gérer plus grande curseurs. Ce que vous devez faire est la sous-classe Uislider et remplacer Pointinide dans votre classe: P>

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


4 commentaires

Petite correction: je pense que vous voulez transmettre une valeur négative de taille_extension_y sur CGRecturet pour rendre la commande plus grande.


Merci merci merci! Avec un cadre de -10 cela fonctionnait parfaitement! J'essayais de résoudre ce problème moi-même depuis un certain temps, et cela a bien fonctionné.


Pensez que cela ne fonctionne plus dans iOS 5. La valeur de 100 par exemple n'a aucun effet. Essayé à la fois positif et négatif.


Cela a toujours un effet pour moi dans iOS5, mais les résultats sont imprévisibles. Même à -1, la zone qui peut être touchée est très grande, beaucoup plus grande que d'avoir besoin d'eux, mais je ne peux pas devenir beaucoup plus petit que 1, alors pas sûr de quoi faire d'autre.



11
votes

J'utilise cette solution :)

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


4 commentaires

Cette solution semble plus simple que celle de @allen Pike. Cela semble fonctionner aussi. Y a-t-il une raison pour laquelle sa réponse est préférée sur la tienne?


Cela fonctionne, mais il décape également le curseur verticalement, mais c'est assez facile pour résoudre.


@Alexhajdu de sorte que cette façon de ne pas sous-classer uislider est si correcte? Je ne peux pas résoudre ce problème en utilisant votre réponse


Oui, sa solution sans sous-classement. Avez-vous eu des erreurs?



9
votes

Augmentez la zone de frappe Uluslider Thumb en augmentant la hauteur du cadre Uislider. Cette approche évite tout décalage et un besoin ultérieur de corriger le cadre du curseur.

- (void)viewDidLoad{
    [super viewDidLoad];

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

}


1 commentaires

Cette réponse est beaucoup plus facile que les deux ci-dessus. Fonctionne très bien. Merci!