2012-06-11 10 views
5

Nie mogę uzyskać wywołania scrollViewDidEndDecelerating. Mam scrollView z 2 widokami w środku. Teraz potrzebuję go, aby ustawić wartość etykiety w pierwszym widoku po zakończeniu przewijania do drugiego widoku.scrollViewDidEndDecelerating not executing

nagłówka pliku:

@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; 

Realizacja Plik:

@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"; 
} 

nie widzę nic złego, należy pracować. Czy ktoś może mi pomóc? Doceniłbym to.

+3

Czy ustawiłeś delegata przewijania? – Felix

+1

Wygląda na to, że tego nie zrobił. –

+0

Hm, nie Nie dodałem niczego do pliku delegata. Jak ustawić? Dzięki :) – iamruskie

Odpowiedz

3

byłoby to zrobić:

Header file: file

@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; 

implementacji:

@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

Idealny. Dzięki :) – iamruskie

+1

zawsze mile widziane;) – Ahmed

+0

Hej, jeszcze jedna rzecz, jak sprawdziłbym pozycję x widoku2? – iamruskie

3

Połącz właściwość delegata przewijania z obiektem właściciela pliku w Konstruktorze interfejsów lub po prostu ustaw delegata ręcznie w ViewDidLoad ViewControllera.

scrollview.delegate = self 
19

scrollViewDidEndDecelerating nie jest wywoływana, gdy użytkownik przesuwa się powoli (czyli widok przewijania nie przewija się po dotknięciu). W takim przypadku możesz wywołać scrollViewDidEndDragging. Aby zrobić coś, gdy użytkownik przestał przewijać, a przewijanie zatrzymało się, możesz je połączyć:

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

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

-(void)endOfScroll 
{ 
//Do something 
}