2012-06-11 3 views
5

Я не могу получить вызов scrollViewDidEndDecelerating. У меня есть scrollView с 2 видами внутри. Теперь мне нужно установить значение метки в первом представлении, когда прокрутка будет завершена, прокручиваясь во второе представление.scrollViewDidEndDecelerating не исполняется

Заголовочный файл:

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

Реализация файла:

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

Я не вижу ничего плохого, оно должно работать. Кто-нибудь может мне помочь? Поблагодарите его.

+3

Вы установили делегат scrollview? – Felix

+1

По внешности он этого не сделал. –

+0

Hm, no Я ничего не добавлял к файлу делегата. Как бы установить его? Спасибо :) – iamruskie

ответ

3

Это будет делать:

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; 

осуществления:

@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

Perfect. Спасибо :) – iamruskie

+1

всегда приветствую;) – Ahmed

+0

Эй, последнее, как бы проверить положение x в представлении2? – iamruskie

3

Либо соедините свойство делегата прокрутки с объектом Owner владельца файла в Interface Builder, либо просто установите делегат вручную в ViewDidLoad ViewController.

scrollview.delegate = self 
19

scrollViewDidEndDecelerating не вызывается, если пользователь медленно прокрутки (т.е. вид прокрутки не продолжает прокручиваться при касании). В этом случае вы можете вызвать scrollViewDidEndDragging. Поэтому, чтобы что-то сделать, когда пользователь остановил прокрутку и прокрутка просмотрела, вы можете их комбинировать:

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

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

-(void)endOfScroll 
{ 
//Do something 
} 
Смежные вопросы