2012-02-04 11 views
6

Tengo una vista de desplazamiento y quiero hacer que desaparezca cada vez que se realiza una panorámica. Funciona bien y en el paneo, scrollview desaparecer pero el problema es que ahora no puedo desplazar los contenidos.El desplazamiento está deshabilitado cuando agrego un UIPangesturerecognizer a UIScrollView

[UIView animateWithDuration:0.2 
         delay:0.2 
        options: UIViewAnimationCurveLinear 
       animations:^{ 
        slideView.frame=CGRectMake(268, 0, 500, 950); 
        curtain.frame=CGRectMake(0, 0, 268, 950); 
        curtain.backgroundColor=[[UIColor alloc]initWithRed:0 green:0 blue:0 alpha:0.6]; 
        [self.view addSubview:slideView]; 
        [self.view addSubview:curtain]; 

       } 
       completion:^(BOOL finished){ 
        NSLog(@"Done!"); 
       }]; 

Éste es cómo cómo hacer que aparezca mi UIScrollView (SlideView es ScrollView) .Y luego agrego un pangesturerecognizer.All funciona bien, pero el desplazamiento está desactivado. (panImage oculta de nuevo mi slideview.) cómo hacer que el desplazamiento funcione.

[slideView addGestureRecognizer:panImage]; 

Respuesta

12

UIScrollView tiene su propio reconocedor de gestos de desplazamiento, que controla el desplazamiento. Al agregar otro reconocedor de gestos pan, está evitando que el reconocedor de gestos de panoramización de la vista de desplazamiento funcione.

Hay varias maneras de manejar esto, pero sería útil si pudiera explicar cómo se supone que el sistema debe saber cuando el usuario está tratando de ignorar la vista de desplazamiento, y cuando está tratando de desplazarse, ya que quieres un gesto panorámico para hacer ambas cosas.

Por ejemplo, puede configurar los delegados de ambos reconocedores de gestos para permitir que los reconocedores funcionen simultáneamente (anulando el método gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:). Puede hacer que cada reconocedor de gestos requiera un número diferente de toques (estableciendo las propiedades minimumNumberOfTouches y maximumNumberOfTouches). Puede usar un UISwipeGestureRecognizer para reconocer el gesto de descartar. Puede detectar cuándo el usuario intenta desplazarse más allá del borde izquierdo de la vista de desplazamiento anulando el método scrollViewDidScroll: del delegado de la vista de desplazamiento.

+1

Debe reconocer múltiples hace gestos simultáneamente, pero también necesita deshabilitar el desplazamiento mientras maneja su gesto. Ver @miroslav. – SwiftArchitect

2

Puede establecer las prioridades de sus reconocimiento de reconocimiento de panorama manualmente. Éste es cómo resuelto el mismo problema: en delegado (BOOL) gestureRecognizerShouldBegin: Hice desplazamiento desactivar en mi ScrollView si se debe devolver SÍ. Y al comienzo de un selector de mi panGestureRecognizer, habilité el desplazamiento.

En este delegado puede crear una condición de su panGestureRecognizer para permitir tal forma, que funcionará si y solo si desea que tenga una prioridad principal.

1

método Swift,
necesidad de añadir UIGestureRecognizerDelegate a su clase:

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

necesidad de ajustar su delegado a la libre:

override func viewDidLoad() { 
    super.viewDidLoad() 
    var scrollView = UIScrollView(frame: self.view.frame) 
    scrollView.delegate = self 
} 

Añadir esta parte en métodos de su clase a gestos simultáneos activos :

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 
Cuestiones relacionadas