2010-11-01 5 views
1

Ainsi, un UISlider fonctionne très bien pour changer/choisir des valeurs, mais cela ne semble pas très bien. Ce que je voudrais mettre en œuvre ressemble plus à un cadran tournant horizontalement. J'ai déjà tous les graphiques dont j'ai besoin et j'ai déjà implémenté la vue déroulante pour faire glisser mon image à gauche et à droite. Le problème à ce stade est que unlick dans un UISlider où je peux simplement appeler slider.value pour obtenir sa valeur, je n'ai aucune idée comment définir une plage de valeurs (max et min) et comment obtenir la valeur spécifique d'un UIScrollView en cours de défilement.Comment utiliser UIScrollView pour modifier des valeurs, comme un UISlider?

Répondre

3

Je dois admettre que je ne suis pas sûr à 100% de la façon dont vous utilisez une scrollview comme curseur, mais vous pouvez utiliser la propriété contentOffset pour obtenir "Le point où l'origine de la vue de contenu est décalée par rapport à l'origine de la vue de défilement. "

Vous aurez besoin de faire quelques calculs pour transformer cela en la valeur que vous voulez, mais c'est simple. Supposons que votre vue de défilement soit horizontale et que vous puissiez faire défiler jusqu'à 400 pixels. C'est-à-dire, si contentOffset est 0 alors vous êtes au début et si contentOffset est 400px alors vous êtes à la fin. La façon dont vous avez utilisé le scrollview dictera exactement comment vous travaillez, si vous êtes désespéré alors vous pouvez simplement imprimer la valeur de contentOffset par programme et observer la gamme empiriquement.

Dans ce cas, vous pouvez obtenir la proportion de la distance à travers le scrollview vous êtes à par quelque chose comme:

CGFloat proportionOffset = scrollView.contentOffset/400.0f; 

Si vous souhaitez ensuite modéliser la gamme [startX, EndX], puis travailler à la sortie :

CGFloat offset = startX + proportionOffset * (endX - startX); 

proportionOffset se termine dans la plage de 0 à 1, à 0 lorsque contentOffset est 0 et à 1 lorsque contentOffset est 400. Si, par exemple, est startX 15 et 35 EndX est alors EndX - startX est 20. Si vous multipliez un nombre compris entre 0 et 1 par 20, vous obtenez un nombre compris entre 0 et 20. Cela C'est à quelle distance de votre gamme vous voulez être. Mais votre plage ne commence pas nécessairement à 0, vous devez donc ajouter la valeur de startX. Pour des termes d'efficacité, il est judicieux de vous définir en tant que délégué de la scrollview et de vérifier le nouveau contentOffset uniquement lorsque vous recevez un scrollViewDidScroll :. Sinon, vous faites beaucoup d'interrogations qui ne sont tout simplement pas nécessaires et, au pire, entravent gravement la capacité du processeur à dormir (et donc à réduire la chaleur et à économiser la batterie).

+0

merci, je vais donner un coup de feu, mais ça ressemble à ce dont j'avais besoin – cgossain

Questions connexes