restricciones olvide eliminar control como codigo centro aparece ios iphone ios5 ios4 uislider

ios - eliminar - me olvide el codigo de restricciones del iphone



iPhone: ¿Cómo detectar el final del arrastre deslizante? (14)

Swift 3.1

A veces, querrá que los eventos de arrastre del control deslizante se activen de forma continua, pero tiene la opción de ejecutar un código diferente dependiendo de si el control deslizante aún se está arrastrando o si acaba de ser arrastrado.

Para hacer esto, isTracking la respuesta de Andy que hace uso de la propiedad isTracking del control deslizante. Necesitaba registrar dos estados: sliderHasFinishedTracking y sliderLastStoredValue .

Mi código correctamente:

  • no dispara una acción al comenzar arrastrar

  • dispara la acción si el usuario solo empuja el control deslizante con un solo toque (lo que significa que el isTracking sigue siendo false )

class SliderExample: UIViewController { var slider: UISlider = UISlider() var sliderHasFinishedTracking: Bool = true var sliderLastStoredValue: Float! override func loadView() { super.loadView() slider.minimumValue = 100.0 slider.maximumValue = 200.0 slider.isContinuous = true slider.value = 100.0 self.sliderLastStoredValue = slider.value slider.addTarget(self, action: #selector(respondToSlideEvents), for: .valueChanged) // add your slider to the view however you like } func respondToSlideEvents(sender: UISlider) { let currentValue: Float = Float(sender.value) print("Event fired. Current value for slider: /(currentValue)%.") if(slider.isTracking) { self.sliderHasFinishedTracking = false print("Action while the slider is being dragged ⏳") } else { if(self.sliderHasFinishedTracking && currentValue == self.sliderLastStoredValue){ print("Slider has finished tracking and its value hasn''t changed, " + "yet event was fired anyway. 🤷") // No need to take action. } else { self.sliderHasFinishedTracking = true print("Action upon slider drag/tap finishing ⌛️") } } self.sliderLastStoredValue = currentValue } }

¿Cómo detectar el evento cuando el usuario ha finalizado el arrastre de un puntero deslizante?


Swift 4 y Swift 3

  1. Agregar destino para los eventos touchUpInside y touchUpOutside . Puedes hacerlo programáticamente o desde el guión gráfico. Así es como lo haces programáticamente.

    slider.addTarget(self, action: #selector(sliderDidEndSliding), for: [.touchUpInside, .touchUpOutside])

  2. Escriba su función para manejar el final del arrastre del deslizador

    func sliderDidEndSliding() { print("end sliding") }


Conectar Touch Up Inside y Value Changed



Dado que UISlider es una subclase de UIControl , puede establecer un destino y una acción para su UIControlEventTouchUpInside .

Si quieres hacerlo en código, se ve así:

[self.slider addTarget:self action:@selector(dragEndedForSlider:) forControlEvents:UIControlEventTouchUpInside];

Eso te enviará un mensaje dragEndedForSlider: cuando finalice el toque.

Si desea hacerlo en su plumilla, puede controlar y hacer clic en su control deslizante para obtener su menú de conexiones, y luego arrastrar desde el socket "Retocar hacia adentro" al objeto de destino.

También debe agregar un objetivo y una acción para UIControlEventTouchUpOutside y para UIControlEventTouchCancel .


En Swift 4 puedes usar esta función.

1 primer paso: - Agregar el objetivo en el control deslizante

self.distanceSlider.addTarget(self, action: #selector(self.sliderDidEndSliding(notification:)), for: ([.touchUpInside,.touchUpOutside]))

2 Segundo paso: - Crear una función

@objc func sliderDidEndSliding(notification: NSNotification) { print("Hello-->/(distanceSlider.value)") }


Prueba asi

customSlider.minimumValue = 0.0; customSlider.maximumValue = 10.0; [customSlider addTarget:self action:@selector(changeSlider:) forControlEvents:UIControlEventValueChanged]; -(void)changeSlider:(id)sender{ UISlider *slider=(UISlider *)sender; float sliderValue=(float)(slider.value ); NSLog(@"sliderValue = %f",sliderValue); }


Puede agregar una acción que toma dos parámetros, un remitente y un evento, para UIControlEventValueChanged:

[slider addTarget:self action:@selector(onSliderValChanged:forEvent:) forControlEvents:UIControlEventValueChanged]

Luego verifique la fase del objeto táctil en su controlador:

- (void)onSliderValChanged:(UISlider*)slider forEvent:(UIEvent*)event { UITouch *touchEvent = [[event allTouches] anyObject]; switch (touchEvent.phase) { case UITouchPhaseBegan: // handle drag began break; case UITouchPhaseMoved: // handle drag moved break; case UITouchPhaseEnded: // handle drag ended break; default: break; } }

Swift 4

slider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)

@objc func onSliderValChanged(slider: UISlider, event: UIEvent) { if let touchEvent = event.allTouches?.first { switch touchEvent.phase { case .began: // handle drag began case .moved: // handle drag moved case .ended: // handle drag ended default: break } } }

Tenga en cuenta que en Interface Builder, al agregar una acción, también tiene la opción de agregar parámetros de remitente y evento a la acción.


Puedes usar:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

para detectar cuándo se producen los eventos touchDown y touchUp en UISlider


Si no necesita ningún dato entre arrastre, entonces simplemente debe establecer:

[mySlider setContinuous: NO];

De esta manera, recibirá el evento valueChanged solo cuando el usuario deje de mover el control deslizante.


Swift 3 respuesta

Tuve el mismo problema y, finalmente, conseguí que esto funcionara, así que tal vez ayude a alguien. Conecta your_Slider a ''Value Changed'' en el guión gráfico y cuando el control deslizante movió "Slider Touched" y cuando se soltó "Slider Released".

@IBAction func your_Slider(_ sender: UISlider) { if (yourSlider.isTracking) { print("Slider Touched") } else { print("Slider Released") } }


Tal vez debería agregar target para los eventos UIControlEventTouchUpInside 、 UIControlEventTouchUpOutside 、 UIControlEventTouchCancel.

Me encontré con el mismo problema antes, porque no agrego destino para el evento UIControlEventTouchCancel .


Tuve un problema similar recientemente. Esto es lo que hice en Swift:

theSlider.continuous = false;

El código que contiene este valor continuo dice:

public var continuous: Bool // if set, value change events are generated // any time the value changes due to dragging. default = YES

El valor predeterminado parece ser SÍ (verdadero). Poniéndolo en falso hace lo que quieres.


Utilizo las notificaciones "Retocar el interior" y "Retocar el exterior".

Generador de interfaz:

Conecte ambas notificaciones en el Generador de Interfaz a su método de recepción. El método podría verse así:

- (IBAction)lengthSliderDidEndSliding:(id)sender { NSLog(@"Slider did end sliding... Do your stuff here"); }

En codigo:

Si quieres conectarlo programáticamente, tendrías algo como esto en tu punto de vista. Aparecerá (o donde sea que te convenga) la llamada:

[_mySlider addTarget:self action:@selector(sliderDidEndSliding:) forControlEvents:(UIControlEventTouchUpInside | UIControlEventTouchUpOutside)];

El método de recepción se vería así:

- (void)sliderDidEndSliding:(NSNotification *)notification { NSLog(@"Slider did end sliding... Do your stuff here"); }