Cómo configurar el control deslizante para hacer clic en la posición y obtener el valor del control deslizante en la ubicación clicada en UISlider en la programación de iPhone. Sé que podemos arrastrar el control deslizante a esa posición, pero no quiero hacerlo. ¿Puedes decirme cómo configurar el control deslizante para hacer clic en la posición? ¿Es posible hacer esto?iPhone: Programar UISlider para colocarlo en la ubicación clicada
Respuesta
Puede simplemente agregar un UITAPGestureRecognizer al control deslizante, luego extraer el UIEvent y los toques asociados con él para descubrir a lo largo del UISlider que se realizó el tap. Luego, configure el valor de su control deslizante en este valor calculado.
ACTUALIZACIÓN:
En primer lugar, la configuración de su deslizador y añadir el reconocedor gesto a ella.
UISlider *slider = [[[UISlider alloc] init] autorelease];
…
<slider setup>
…
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease];
[slider addGestureRecognizer:gr];
luego implementar el selector
- (void)sliderTapped:(UIGestureRecognizer *)gestureRecognizer {
<left as a user excercise*>
}
* Consejo: Read the docs de averiguar cómo obtener el locationInView extrapola y averiguar lo que el regulador debe ser
Aquí está la parte "izquierda como un ejercicio de usuario ":
- (void) tapped: (UITapGestureRecognizer*) 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];
}
La forma en que lo hice es para subclasificar el deslizador y cheque en touchesBegan
. Si el usuario pulsa sobre el área de botón para el pulgar (que rastreamos) y luego ignorar el grifo, pero en ningún otro lugar en la barra de seguimiento que hacemos: :
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
// if we didn't tap on the thumb button then we set the value based on tap location
if (!CGRectContainsPoint(lastKnownThumbRect, touchLocation)) {
self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * (touchLocation.x/self.frame.size.width);
}
[super touchesBegan:touches withEvent:event];
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect thumbRect = [super thumbRectForBounds:bounds trackRect:rect value:value];
lastKnownThumbRect = thumbRect;
return thumbRect;
}
mejor solución –
si usó una imagen -setThumb personalizada, use 'self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * ((touchLocation.x - self.currentThumbImage.size.width/2)/(self.frame.size.width-self.currentThumbImage.size.width)); 'in -touchesBegan. – SwiftArchitect
que estaba usando el código UISlider subclases para escuchar eventos valueChanged en ios6> para implementar un tipo de función de ajuste a cuadrícula.
Esto no funcionaba cuando se actualizó a iOS7 porque ya no activa el UIControlEventsValueChanged. Para cualquier persona que tenga el mismo problema que se fija mediante la adición de una línea en el caso de() de la siguiente manera:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
// if we didn't tap on the thumb button then we set the value based on tap location
if (!CGRectContainsPoint(lastKnownThumbRect, touchLocation)) {
self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * (touchLocation.x/self.frame.size.width);
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
[super touchesBegan:touches withEvent:event];
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect thumbRect = [super thumbRectForBounds:bounds trackRect:rect value:value];
lastKnownThumbRect = thumbRect;
return thumbRect;
}
espero que ayude a alguien :)
he utilizado este código. Obtener de: http://imagineric.ericd.net/2012/11/15/uislider-touch-to-set-value/
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)];
[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];
}
Espero que esto pueda ayudarlo.
Parece que solo subclasificar UISlider y volver siempre fiel a beginTracking produce el efecto deseado.
IOS 10 y Swift 3
class CustomSlider: UISlider {
override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
return true
}
}
- 1. iPhone UISlider con dos pulgares/indicadores?
- 2. Control de volumen usando UIslider Iphone?
- 3. ¿Es posible programar el iPhone en C++
- 4. Cómo programar programáticamente la corrección automática en iphone sdk?
- 5. iOS - imagen personalizada para UISlider
- 6. cómo detectar y programar batidos para el iphone
- 7. Programar la máquina para reactivar
- 8. Práctica para programar la competencia
- 9. Rehabilitación de servicios de ubicación para la aplicación de iPhone
- 10. configuración canShowCallOut = NO para la anotación de ubicación actual, iPhone
- 11. Programando la ubicación del simulador de iphone
- 12. Observando el valor de un UISlider - iPhone KVO
- 13. botón de ubicación del iPhone
- 14. UISlider events
- 15. personalizada UISlider
- 16. Solicitando la ubicación del iPhone mientras está en segundo plano?
- 17. ¿Herramientas para programar tutoriales?
- 18. Establecer la ubicación en el simulador de iPhone
- 19. BroadcastReceiver para la ubicación
- 20. ¿Qué necesito para programar la GPU Tegra
- 21. UILabel Over UISlider Thumb
- 22. UISlider y UIScrollView
- 23. ¿Cómo puedo ocultar la pista de UISlider?
- 24. ¿Cómo hacer invisible la "pista" de UISlider?
- 25. Alinear UISlider - Objective-C
- 26. iPhone: problema emergente de Ubicación central
- 27. Obtenga el código postal de la ubicación actual - iPhone SDK
- 28. iPhone: accede a la información de ubicación desde una foto
- 29. ¿Tiene que pagar una tarifa de licencia para programar para iPhone/iOS?
- 30. iPhone: Prueba de aplicación y ubicación principal
le puede dar una idea aproximada de cómo introducir UITapGestureRecognizer en deslizador? – suse