UISlider min0,1 max10 ab 3,0 in 0,5er schritten bis 10

F

flotisso

Neues Mitglied
Thread Starter
Dabei seit
21.06.2011
Beiträge
12
Reaktionspunkte
0
Hallo Community,

ich bin relativ neu in der xCode welt und bin momentan am verzweifeln wie ich folgendes am besten Löse:

Ich versuche einen UISlider in meinem iPhone Projekt folgendermaßen aussehen zu lassen:

minimaler wert: 0,1
maximaler wert: 10
wert bei mittelstellung des sliders: 2,0
ab dem wert 3,0 dann nur noch in 0,5er schritten hoch bis 10

ich versuche mich bereits mit diversen "if" schleifen aber komme einfach zu keinem halbwegs sinnvollen ergebnis.

bitte erbarmt euch vor mir und gebt mir ein klein wenig hilfestellung :)
 
ist meine angelegenheit so einfach, das mir keiner einen rat geben will oder so schwierig? :D
 
Hey, kann dir nicht wirklich weiterhelfen da ich selbst noch ein Anfänger bin.
Habe in der Doku nichts gefunden was dir da weiterhelfen könnte. Mich würde aber mal interessieren aus welchem Grund du deinen Slider so unterteilen willst.

Gruß Dennis
 
weil ich hier eine tonnagen angabe machen will und diese angabe ab 3tonnen mit 0,1er schritten uninteressant wird :)
sozusagen fängt der slider mit 0,1t an, da der standard 2t sind soll dieser in der mittelstellung sein und ab 3t nur noch in 0,5er schritten 3,5 - 4 - 4,5 usw...
 
eigentlich sollte das ganze doch mit ein paar "if" schleifen erledigt sein, oder macht man sowas normalerweise anders?
 
Mh, mir fallen da ein paar Lösungswege ein die aber bestimmt nicht die besten sind, kann noch nicht mal mit Halbwissen dienen :)
Du könntest deinem Slider 43 tick marks und die werte 0-42 verpassen und ihn so programmieren das er nur auf diesen Anhält. Den Rückgabewert könntest du dann benutzen um aus einem Array den Tonnagen Wert auszulesen.
 
Hallo,
das ist eine interessante Aufgabe. Ich habe sie gleich mal versucht zu lösen ;-)

Meine Lösung:

-44 tick marks einstellen
-festlegen, dass der Slider nur an diesen halten darf
-minValue = 0
-maxValue =43
-CurrentValue =19 ("Mittelwert")

Code:
-(IBAction)sliderAction:(NSSlider*)sender{

    
    double output;
    double slidervalue = [sender doubleValue];
    
    //Slider ist in 44 Schritte eingeteilt
    
    if (slidervalue ==0) {
        output = 0.1; //An Position 0 bekommt der "output" den Wert 0,1
        
    } else {
        if (slidervalue <=29) {
            //diese Schritte zählen nun in 0,1 Schritten hoch bis 3,0
            output = (slidervalue / 10)+0.1;
            
        } else {
            double helpValue = slidervalue-29;
            
            output = helpValue*0.5 +3;
            //Schritt 30 bis Ende zählt immer in 0,5 Schritten
        }   
    
    }
    
    [outputTextField setDoubleValue:output]; //Wert ggf. anzeigen lassen
    
    
}

-(void)awakeFromNib{

    [outputTextField setDoubleValue:2.0]; //nötig, damit beim Start der "Mittelwert" angezeigt wird

}

Kannst du ja mal testen.
Ist sicherlich nicht die schönste Variante, aber bei mir hat sie funktioniert.

gruß
 
@Bombard Es geht um einen UISlider, nicht um einen NSSlider :)
 
is echt zum haare ausreißen :eek:)
So richtig zum Gehirnzellen ausbrennen bei dem Beispiel,... unfassbar so früh schon zu scheitern xD
 
Hi,
ich habe es nun auch mit einem UISlider gelöst.

UISlider:
min: 0
max: 43
current: 19
-->Verbunden mit "Value Changed"

SliderTestIphoneViewController.h
Code:
#import <UIKit/UIKit.h>

@interface SliderTestIphoneViewController : UIViewController
{
    
    
    IBOutlet UILabel* outputTextField;
    
    IBOutlet UILabel* sliderValueLabel; //Nur um Stelle des Sliders anzuzeigen
    
    
    
}

-(IBAction)sliderAction:(UISlider*)sender;

-(void)rechner:(int)slidervalue;



@property (nonatomic,retain) IBOutlet UILabel *outputTextField;
@property (nonatomic,retain) IBOutlet UILabel *sliderValueLabel;



@end


SliderTestIphoneViewController.m

Code:
#import "SliderTestIphoneViewController.h"

@implementation SliderTestIphoneViewController

@synthesize outputTextField;
@synthesize sliderValueLabel;

-(IBAction)sliderAction:(UISlider*)sender{
    
    int slidervalue = sender.value;
    
    //Nur um Stelle des Sliders anzuzeigen
    NSString *valueString = [NSString stringWithFormat:@"%i", slidervalue];
    self.sliderValueLabel.text=valueString;
    
    //Slider ist in 44 Schritte eingeteilt
    
    [self rechner:slidervalue];    
    
    //[outputTextField setDoubleValue:output]; //Wert ggf. anzeigen lassen

}

-(void)rechner:(int)slidervalue {

    double output;
    double sliderDoubleValue = slidervalue;
    
    if (sliderDoubleValue ==0) {
        output = 0.1; //An Position 0 bekommt der "output" den Wert 0,1
        
    } else {
        if (sliderDoubleValue <= 29) {
            //diese Schritte zählen nun in 0,1 Schritten hoch bis 3,0
            output = (sliderDoubleValue / 10)+0.1;
            
        } else {
            double helpValue = sliderDoubleValue-29;
            
            output = helpValue*0.5 +3;
            //Schritt 30 bis Ende zählt immer in 0,5 Schritten
        }   
        
    } 
    
    NSString *u = [NSString stringWithFormat:@"%f", output];
    
    self.outputTextField.text=u;
    

}


- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
}
*/

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

Ich hoffe ihr versteht so einigermaßen, was ich da gemacht habe.
Wenn ihr Fragen habt meldet euch ;-)

gruß
 
Zurück
Oben Unten