2012-06-11 13 views
5

Parece que no puedo obtener scrollViewDidEndDecelerating llamado. Tengo un scrollView con 2 vistas dentro. Ahora necesito que establezca un valor para una etiqueta en la primera vista cuando la vista de desplazamiento termine de desplazarse a la segunda vista.scrollViewDidEndDecelerating no ejecutándose

del encabezado del archivo:

@interface ViewController: UIViewController 
{ 
    UIScrollView *scrollView; 
    UIView *view1; 
    UIView *view2; 
} 

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 
@property (strong, nonatomic) IBOutlet UIView *view1; 
@property (strong, nonatomic) IBOutlet UIView *view2; 
@property (weak, nonatomic) IBOutlet UILabel *lbl; 

Implementación del archivo:

@synthesize scrollView, view1, view2; 

-(void)viewDidLoad 
{ 
    self.view1=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    self.view2=[[UIView alloc] initWithFrame:CGRectMake(320, 0, 320, 480)]; 

    [self.scrollView addSubView:self.view1]; 
    [self.scrollView addSubView:self.view2]; 

    self.scrollView.bounces=NO; 
    self.scrollView.contentSize=CGSizeMake(640,460); 
    [self.scrollView setShowHorizontalScrollIndicator:NO]; 
    [self.scrollView scrollRectToVisible:CGRectMake(0, 0, 320, 416) animated:NO]; 
} 

-(void)scrollViewDidEndDecelerating:(UIView *)scrollView 
{ 
    [email protected]"0"; 
} 

No veo nada malo, que debería estar trabajando. ¿Alguien me puede ayudar? Lo agradecería

+3

¿configuró el delegado de scrollview? – Felix

+1

Por lo que parece, no lo hizo. –

+0

Hm, no, no agregué nada al archivo delegado. ¿Cómo lo configuraría? Gracias :) – iamruskie

Respuesta

3

Esto haría:

del encabezado del archivo:

@interface ViewController: UIViewController <UIScrollViewDelegate> //promise that you'll act as scrollView's delegate 
{ 
    UIScrollView *scrollView; 
    UIView *view1; 
    UIView *view2; 
} 

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 
@property (strong, nonatomic) IBOutlet UIView *view1; 
@property (strong, nonatomic) IBOutlet UIView *view2; 
@property (weak, nonatomic) IBOutlet UILabel *lbl; 

Implementación del archivo:

@synthesize scrollView, view1, view2; 

-(void)viewDidLoad 
{ 
    self.view1=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    self.view2=[[UIView alloc] initWithFrame:CGRectMake(320, 0, 320, 480)]; 

    [self.scrollView addSubView:self.view1]; 
    [self.scrollView addSubView:self.view2]; 

    self.scrollView.bounces=NO; 
    self.scrollView.contentSize=CGSizeMake(640,460); 
    [self.scrollView setShowHorizontalScrollIndicator:NO]; 
    [self.scrollView scrollRectToVisible:CGRectMake(0, 0, 320, 416) animated:NO]; 
    [self.scrollView setDelegate:self];//Set delegate 
} 

-(void)scrollViewDidEndDecelerating:(UIView *)scrollView 
{ 
    [email protected]"0"; 
} 
+0

Perfecto. Gracias :) – iamruskie

+1

siempre bienvenido;) – Ahmed

+0

Hola una última cosa, ¿cómo voy a comprobar la posición x de view2? – iamruskie

3

O bien conecte la propiedad de delegado de la vista de desplazamiento al objeto Propietario del archivo en el Creador de interfaz o simplemente configure el delegado manualmente en ViewDidLoad de ViewController.

scrollview.delegate = self 
19

scrollViewDidEndDecelerating no se llama si el usuario se desplaza lentamente (es decir, el punto de vista de desplazamiento no continúa desplazándose en el retoque). En ese caso, puede llamar a scrollViewDidEndDragging. Entonces, para hacer algo cuando el usuario ha dejado de desplazarse y la vista de desplazamiento se ha detenido, puede combinarlos:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if(!decelerate) [self endOfScroll]; 
} 

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 
    [self endOfScroll]; 
} 

-(void)endOfScroll 
{ 
//Do something 
} 
Cuestiones relacionadas