2009-05-29 6 views
1

J'ai curseur personnalisé que j'utilise l'événement tactile pour répondre à:iPhone curseur Sensibilité

[bSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged]; 

Je trouve qu'il est très difficile à utiliser, il ne répond pas à une touche environ 50% du temps. Comparé au curseur de volume avec le lecteur de musique qui fonctionne bien chaque fois que vous le touchez. Y a-t-il des secrets pour créer un curseur dans le code qui le rendra plus réactif?

Répondre

0

Eh bien, j'ai essayé plusieurs choses, y compris les suggestions ci-dessus, mais n'a jamais eu mon slider à travailler ainsi que le curseur de volume de l'iPhone dans l'application musicale. La seule chose qui a aidé était d'ajouter un fond clair autour de l'image du bouton pour agrandir l'espace tactile. Cela a créé des problèmes pour faire glisser le bouton jusqu'en bas et en haut du curseur que je n'ai jamais complètement résolu. Maintenant, avec OS 3.0 semble fonctionner beaucoup mieux.

1

Le problème est l'événement que vous suivez. UIControlEventTouchUpInside signifie que votre méthode -start ne sera appelée que si vous levez le doigt alors qu'il est encore dans les limites du contrôle, ce qui n'est pas facile à faire sur un curseur.

Qu'est-ce que vous voulez sans doute est UIControlEventTouchUpOutside et/ou UIControlEventTouchDragExit, qui appellera -start soit lorsque vous soulevez votre doigt en dehors des limites du contrôle, ou lorsque votre doigt est tiré à partir d'un contrôle à l'extérieur de ses limites, respectivement.

Voir le UIControl reference pour plus d'informations.

+0

Merci pour les commentaires mais j'ai publié j'ai copié la mauvaise ligne la première fois. Je l'ai réparé et j'utilise le UIControlEventValueChanged. – Aaron

3

J'ai eu le même problème avec mon UISlider personnalisé et l'ai résolu en utilisant une plus grande image de pouce avec la transparence autour de l'extérieur.

J'ai aussi eu des problèmes avec ma fonction de rappel en cours d'exécution lentement et provoque le curseur très laggy et maladroit d'utiliser, que je fixai en ajoutant une simple vérification en haut de la fonction:

int val = ceil(sliderView.value); 
if (val == _lastSliderVal) return; 
_lastSliderVal = val; 

// .. code to update various display elements based on slider value 

Après changeant les deux, le curseur fonctionne magnifiquement.