2010-11-05 6 views
4

Existe-t-il un moyen d'augmenter exponentiellement les valeurs produites par un UISlider dans une application iPhone? Par exemple, le premier tiers génère 1 -10, le deuxième tiers génère 11 à 100 et le dernier tiers génère 101 à 1000?Utiliser UISider pour générer une échelle logarithmique de valeurs

+0

cela ressemble plus exponentielle que logarithmique ... – Vladimir

+0

je ne savais pas qu'il était le bon mot, mais wikipedia dit « un exemple simple est quand incréments sur l'axe vertical d'un graphique sont étiquetés 1 , 10, 100, 1000, au lieu de 1, 2, 3, 4. " – espekia

Répondre

12

Vous pouvez calculer vous-même la valeur log/exp à partir du curseur et afficher cette valeur!

Mais si vous voulez une valeur comprise entre 1 à 1000, vous pouvez définir min du curseur à 0, max à 3 et faire la puissance de 10:

powf(10.0,mySlider.value) 
+0

haha ​​un peu génie, n'a pas pensé à cela: P quel est le code obj-c pour cela? Y at-il une fonction ou est-ce que j'écris moi-même les maths? Utilisez les instructions if pour déterminer combien multiplier chaque valeur ou y a-t-il une méthode plus propre? – espekia

+0

C'est la fonction, en C. Où que vous vouliez extraire la valeur du curseur comme exponentielle, utilisez cet extrait là. N'oubliez pas de marquer la réponse de Benôit comme acceptée. – JoePasq

9

I dérivés de ces méthodes objectives C de cette après: Logarithmic slider

-(double) wpmForSliderValue: (double) sliderValue { 
    // Input will be between min and max 
    static double min = WPM_SLIDER_MIN; 
    static double max = WPM_SLIDER_MAX; 

    // Output will be between minv and maxv 
    double minv = log(WPM_SCALE_MIN); 
    double maxv = log(WPM_SCALE_MAX); 

    // Adjustment factor 
    double scale = (maxv - minv)/(max - min); 

    return exp(minv + (scale * (sliderValue - min))); 
} 

-(double) sliderValueForWpm: (double) wpm { 
    // Output will be between min and max 
    static double min = WPM_SLIDER_MIN; 
    static double max = WPM_SLIDER_MAX; 

    // Input will be between minv and maxv 
    double minv = log(WPM_SCALE_MIN); 
    double maxv = log(WPM_SCALE_MAX); 

    // Adjustment factor 
    double scale = (maxv - minv)/(max - min); 

    return (((log(wpm) - minv)/scale) + min); 
} 
+2

+1 pour résoudre mon cauchemar – btype

Questions connexes