2012-06-11 9 views
5

Ich kann nicht scheinen, scrollViewDidEndDecelerating aufgerufen zu bekommen. Ich habe einen ScrollView mit 2 Ansichten im Inneren. Jetzt benötige ich einen Wert für ein Label in der ersten Ansicht, wenn der Scrollview mit der zweiten Ansicht fertig ist.scrollViewDidEndDecelerating nicht ausgeführt

Header-Datei:

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

Implementierungsdatei:

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

Ich sehe nichts falsch, es sollte funktionieren. Kann mir jemand helfen? Würde es zu schätzen wissen.

+3

Haben Sie den Scrollview-Delegaten festgelegt? – Felix

+1

Mit dem Aussehen davon hat er nicht. –

+0

Hm, nein Ich habe nichts zu der Delegatendatei hinzugefügt. Wie würde ich es einstellen? Danke :) – iamruskie

Antwort

3

Dies tun würde:

Datei-Header:

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

Implementierungsdatei:

@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

Perfekt. Danke :) – iamruskie

+1

immer willkommen;) – Ahmed

+0

Hey eine letzte Sache, wie würde ich die x-Position von view2 überprüfen? – iamruskie

3

Verbinden Sie entweder die Eigenschaft delegate der Bildlaufansicht mit dem Objekt Dateibesitzer in Interface Builder oder legen Sie den Stellvertreter manuell in ViewDidLoad des ViewControllers fest.

scrollview.delegate = self 
19

scrollViewDidEndDecelerating nicht, wenn der Benutzer (dh die Bildlaufansicht langsam aufgerufen wird Scrollen scrollt nicht weiter nach oben). In diesem Fall könnten Sie scrollViewDidEndDragging aufrufen. Um etwas zu tun, wenn der Benutzer den Bildlauf angehalten hat und der Bildlauf gestoppt wurde, können Sie sie kombinieren:

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

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

-(void)endOfScroll 
{ 
//Do something 
}