2012-05-16 5 views
5

Ich möchte eine Aktion auslösen, indem Sie auf einen bestimmten Punkt auf UISlider tippen, indem Sie auf tippen, nicht durch Ziehen des Schiebereglers.Ändern des Uislider-Werts beim Tippen auf einen bestimmten Punkt

Wie kann ich an einem Punkt auf einen UISlider tippen, um den Schiebereglerwert festzulegen?

Ein Code-Schnipsel wäre willkommen.

+0

Haben Sie selbst etwas probiert? – Zoleas

+0

Ich habe es versucht, indem Sie benutzerdefinierte Tasten setzen, aber es ist nicht der richtige Weg. Auch habe ich versucht, Touchdown und Touch-up-Ereignisse für Slider zu definieren, aber keiner von ihnen funktioniert. – Ronak

Antwort

2

Try uiview touchesBegan Funktion, wenn v1 hinter dem Ort UISlider \

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == v1) 
    { 
    CGPoint location = [touch locationInView:v1]; 
    NSInteger i = location.x; 
    } 

erhält dann den Prozentsatz des xPoint durch Multiplikation mit v1 Rahmen, der ist, wenn v1 Rahmen x-Wert = 50 und i a uiview mit einfarbigem Hintergrund ist = 5means 10 Prozent dann den Prozentwert mit slider Wert multiplizieren den slider Wert

+1

@ user1389841 Wenn Sie denken, die Antwort ist nützlich, vergessen Sie nicht, dass Sie die Antwort akzeptieren können. – NAZIK

+2

Sie können auch mit Berührungen bewegte Funktion zum Verschieben nach dem Tippen auf die Ansicht gehen. – NAZIK

36
UISlider *slider = [[[UISlider alloc] init] autorelease]; 
… 

slider Setup

… 
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease]; 
[slider addGestureRecognizer:gr]; 
- (void)sliderTapped:(UIGestureRecognizer *)g { 
    UISlider* s = (UISlider*)g.view; 
    if (s.highlighted) 
     return; // tap on thumb, let slider deal with it 
    CGPoint pt = [g locationInView: s]; 
    CGFloat percentage = pt.x/s.bounds.size.width; 
    CGFloat delta = percentage * (s.maximumValue - s.minimumValue); 
    CGFloat value = s.minimumValue + delta; 
    [s setValue:value animated:YES]; 
} 
zu ändern
+3

Vergessen Sie nicht, ein Ereignis für UIControlEventValueChanged auszulösen :-) –

+4

Wie @DanVanWinkle angegeben, vergessen Sie nicht, Steuerelement Ereignis auszulösen, sonst wird Ihre Benutzeroberfläche aktualisieren, aber Ihr Backend wird nicht. Um das Ereignis auszulösen, rufen Sie dieses am Ende von sliderTapped auf: [s sendActionsForControlEvents: UIControlEventValueChanged]; –

+1

Ist es möglich, das Gleiche mit UIControl addTarget zu tun: action: forControlEvents: API? – rclai