2012-06-11 19 views
5

Tôi dường như không nhận được scrollViewDidEndDecelerating được gọi. Tôi có một scrollView với 2 lần xem bên trong. Bây giờ tôi cần nó để thiết lập một giá trị cho một nhãn trong khung nhìn đầu tiên khi scrollview hoàn thành cuộn đến khung nhìn thứ hai.scrollViewDidEndDecelerating không thực hiện

header file:

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

Thực hiện File:

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

tôi không thấy bất cứ điều gì sai, nó nên được làm việc. Ai đó có thể giúp tôi không? Sẽ đánh giá cao nó.

+3

bạn có đặt đại biểu scrollview không? – Felix

+1

Bởi vẻ ngoài của nó, anh ta đã không. –

+0

Hm, không tôi không thêm bất cứ điều gì vào tệp đại biểu. Tôi sẽ đặt nó như thế nào? Cảm ơn :) – iamruskie

Trả lời

3

Điều này sẽ làm:

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

Thực hiện File:

@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

Hoàn hảo. Cảm ơn :) – iamruskie

+1

luôn chào đón;) – Ahmed

+0

Xin chào, tôi sẽ kiểm tra vị trí x của view2 như thế nào? – iamruskie

3

Hoặc là kết nối thuộc tính đại biểu của scrollview với đối tượng Chủ sở hữu tệp trong Trình tạo giao diện hoặc chỉ đặt đại biểu theo cách thủ công trong ViewController của ViewController.

scrollview.delegate = self 
19

scrollViewDidEndDecelerating không được gọi nếu người dùng đang di chuyển chậm (tức là xem cuộn không tiếp tục cuộn khi chạm lên). Trong trường hợp đó, bạn có thể gọi scrollViewDidEndDragging. Vì vậy, để làm điều gì đó khi người dùng đã ngừng cuộn và chế độ xem cuộn đã dừng, bạn có thể kết hợp chúng:

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

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

-(void)endOfScroll 
{ 
//Do something 
} 
Các vấn đề liên quan