UIPageViewController con UISlider dentro del controller: aumenta el área de golpe del control deslizante

Tengo varios controlleres en mi PageViewController y en un controller tengo algunos controles deslizantes. Ahora hay un problema que el usuario debe tocar exactamente el círculo del slider (no estoy seguro sobre la expresión correcta, pulgar? – esa parte mobile) y me gustaría boost el área en la que reactjs el slider y no todo el PageViewController. Probé estas soluciones pero no ayuda:

Tengo estos methods en mi class deslizante personalizada porque me gustaría reutilizar esto. Lo último que encontré y no probé es crear una capa de objects sobre el control deslizante que "toma" el gesto y deshabilita PageViewController, pero no estoy seguro de cómo hacerlo y no estoy seguro de si es una solución buena o mejor.

No soy un gran fanático del componente UISlider porque como notó, no es trivial boost el área de impacto del slider real. Le sugeriría que replique el UISlider en lugar de otro usando un gesto de paneo para una experiencia de usuario mucho mejor:

yo. cree un background del control deslizante con un UIImageView separado con una image del control deslizante. ii. crear el PanGesture:

 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:); [imageView addGestureRecognizer:pan]; 

iii implementar el método handlePan:

 - (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { //pan (slide) begins CGPoint translation = [recognizer locationInView:self.view]; translation.y = self.slideImage.center.y; self.slideImage.center = translation; if(recognizer.state == UIGestureRecognizerStateEnded) { LTDebugLog(@"\n\n PAN, with spot: %f\n\n", self.slideImage.center.x); //do something after user is done sliding } } 

El gran beneficio de este método es que tendrá una experiencia de usuario mucho mejor, ya que puede hacer que el UIImageView receptivo sea tan grande como desee.

Alternativamente, podría subclass un UISlider y boost el espacio de éxito allí, aunque en mi experiencia esto da resultados mixtos.

Espero que esto ayude

En su class CustomSlider , anule el método thumbRectForBounds :

Simplemente devuelva el valor del rectángulo según lo requiera:

 - (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value { return CGRectMake (bounds.origin.x, bounds.origin.y, yourWidthValue, yourHeightValue ); } 

Cambia tu yourWidthValue yourHeightValue yourWidthValue y tu valor de yourHeightValue según tu requisito. Y luego mientras usas

Cree un object como el siguiente:

 CustomSlider *slider = [[CustomSlider alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; [slider thumbRectForBounds: slider.bounds trackRect:slider.frame value:15.f]; // change values as per your requirements. 

Espero que esto ayude.

Cree una image de pulgar personalizada que tenga un gran margen vacío y configúrela en su control deslizante, así:

 [theSlider setThumbImage:[UIImage imageNamed:@"slider_thumb_with_margins"] forState:UIControlStateNormal]; 

Para hacer la image, obtenga una copy de la image del pulgar del sistema usando cualquiera de los extractores de ilustraciones de UIKit (solo busque en la web una). Abra la image en miniatura en Photoshop y aumente el tamaño del canvas dos veces el margen que desee agregar. Asegúrese de cambiar el tamaño del canvas y no el tamaño de la image, ya que el tamaño de la image estirará la image para llenar el nuevo tamaño. Esto colocará un espacio vacío alnetworkingedor del pulgar que formará parte del área de testing, pero dado que es todo transparente, no cambiará el aspecto del control deslizante.