2010-11-11 6 views
19

J'essaie d'émuler la fonction "Slide to Unlock" d'Apple dans mon application. J'arrive à ce point (image ci-dessous), mais comme vous pouvez le voir, la "piste" d'UISlider est visible et couvre mon texte. Y at-il un moyen de modifier un attribut par programme qui rendra la "piste" invisible?Comment rendre invisible la "piste" d'UISlider?

alt text

S'il vous plaît laissez-moi savoir si vous avez besoin de mon code.

Merci d'avance!

EDIT: Si je change l'alpha du curseur à 0, il se débarrasse de mon bouton coulissant, donc cela ne fonctionnera pas à moins que je ne le fasse mal. :)

+0

Il est contre Human Interface Guidelines d'Apple pour reproduire la diapositive pour déverrouiller l'interface utilisateur. –

+0

@JackLawrence preuve? – aqua

Répondre

25

En fait, je l'ai juste compris. Voici ce que je l'ai fait:

UIImage *sliderMinimum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0]; 
[slider setMinimumTrackImage:sliderMinimum forState:UIControlStateNormal]; 
UIImage *sliderMaximum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0]; 
[slider setMaximumTrackImage:sliderMaximum forState:UIControlStateNormal]; 

clearTrack.png est juste une image de curseur clair que je fait.

Maintenant j'ai ceci: yay! alt text

+0

Merci d'abord, je n'ai jamais pensé à cette méthode. C'est beaucoup plus simple et plus rapide que les autres méthodes – cgossain

+0

Solution magnifiquement simple pour ce problème. –

+0

Vous n'avez même pas besoin de fournir un fichier image - voir d'autres réponses. – clearlight

6

Il n'y a probablement pas moyen de cacher la piste; le "slide to unlock" ne se comporte pas comme un UISlider et est probablement un contrôle personnalisé. Vous pouvez être capable de pirater le contrôle de curseur, peut-être en définissant l'opacité faible (0 le rendra caché et il ne recevra pas de touches), mais si vous allez cette route, vous aurez probablement quelque chose après une mise à jour du système d'exploitation. Apple ne se plie pas en arrière pour la compatibilité comme le fait Microsoft.

La bonne façon de faire cela est avec un contrôle personnalisé. Cela peut sembler plus de travail que d'utiliser un UISlider, mais ce n'est pas si vous le comparez à tout le temps que vous avez passé et/ou passerez à pirater un UISlider.

Pour ce faire: sous-classe UIControl. Ecrivez votre propre code de dessin pour le rendre correct (vous pouvez probablement réutiliser une partie de ce que vous faites maintenant). Alors inscrivez-vous pour les événements tactiles pour déplacer la poignée du curseur:

  • UIControlEventTouchDown: si elle est sur la poignée, mettre un « mouvement » drapeau
  • UIControlEventTouchDragInside: si le drapeau mobile est fixé, déplacez la poignée à la position tactile ; vous pouvez simplement mettre à jour une variable d'instance, appelez setNeedsDisplay pour la dessiner dans la nouvelle position.
  • UIControlEventTouchUpInside: si est mis en drapeau en mouvement, et la poignée est à la fin, déverrouiller

Si vous voulez imiter la vraie poignée de déverrouillage, jouer avec elle et voir comment il se comporte. Vous devrez peut-être répondre différemment aux événements (que se passe-t-il si vous faites glisser le curseur hors du chemin du curseur)? Mais vous devriez être capable de comprendre l'essentiel.

+0

Bonne réponse, je vais essayer de changer l'opacité à un réglage bas, et si cela ne fonctionne pas, je vais devoir essayer de faire mon propre contrôle. Merci d'avoir répondu! –

+0

Bien que j'ai également répondu, c'est la bonne réponse. – Justin

3

En réponse à la question posée, vous pouvez définir un png 1px transparent pour les images de piste minimum et maximum.

+0

C'est exactement le problème, comme vous pouvez le voir dans ma réponse ci-dessus. –

+0

Vous ne devez pas avoir vu ma réponse à temps. Veuillez laisser la réponse de benzado sélectionnée. Cette approche est correcte pour ce que vous essayez d'accomplir. – Justin

26

Voici encore plus simple.Pas besoin de créer des images, juste instancier une classe UIImage vide: P

UIImage *clearImage = [[UIImage alloc] init]; 
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal]; 
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal]; 
+0

cela fonctionne parfaitement pour moi! –

+0

brillant !!!!! –

5

Swift:

slider.setMinimumTrackImage(UIImage(), forState: .Normal) 
slider.setMaximumTrackImage(UIImage(), forState: .Normal) 
+0

Bonne réponse, mais je vous recommande de tout supprimer après le premier bloc de code. Il est très tangent à la question, et le TL; DR est que l'utilisation d'une ou deux images vides est bien. – phatmann

3

Ressemble réglage juste la couleur de teinte pour l'effacer ne ...

[slider setMinimumTrackTintColor:[UIColor clearColor]]; 
    [slider setMaximumTrackTintColor:[UIColor clearColor]]; 
1

Réponse de @Arjay Waran est le meilleur à mon avis.

Voici la version 3.0 de Swift.

slider.minimumTrackTintColor = UIColor.clear 
slider.maximumTrackTintColor = UIColor.clear 

Vive

Questions connexes