UITableViewはUIScrollViewを継承しているので、UITableViewのdelegateにUIScrollViewDelegateプロトコルを
採用したクラスを設定しておけば、そのクラスで、スクロールの開始、終了イベントの通知を受けることが出来ます。
(おそらく、UITableViewがUIScrollViewのdelegateをオーバーライドしているからだと思います。)
スクロールの開始時は、(厳密にはドラッグの開始)「scrollViewWillBeginDragging:」がコールされます。
その後、「scrollViewDidScroll:」がスクロールしている間、何回もコールされます。
ですので、スクロール開始時に何か処理をするとしたら、「scrollViewWillBeginDragging:」が適しています。
その後、ドラッグが終わると、「scrollViewDidEndDragging:willDecelerate:」がコールされ、その後、
しばらくスクロールが続いた後(スクロールは急停止せず、徐々にとまります)、完全停止した後に「scrollViewDidEndDecelerating:」がコールされます。
スクロール終了時の処理は、場合に応じてこの2つから選択すればよいと思います。
今回、これを利用した以下のようなサンプルアプリを作ってみました。

ViewControllerのViewにUITableViewとキャラクター画像のUIImageViewを貼付け、スクロールが開始すると、キャラクター画像を
アニメーションで徐々に透過し、スクロールが終了すると、今度はアニメーションで徐々に表示されるようにしました。
UITableViewのdelegateの設定は、storyboardで行っています。
採用したクラスを設定しておけば、そのクラスで、スクロールの開始、終了イベントの通知を受けることが出来ます。
(おそらく、UITableViewがUIScrollViewのdelegateをオーバーライドしているからだと思います。)
スクロールの開始時は、(厳密にはドラッグの開始)「scrollViewWillBeginDragging:」がコールされます。
その後、「scrollViewDidScroll:」がスクロールしている間、何回もコールされます。
ですので、スクロール開始時に何か処理をするとしたら、「scrollViewWillBeginDragging:」が適しています。
その後、ドラッグが終わると、「scrollViewDidEndDragging:willDecelerate:」がコールされ、その後、
しばらくスクロールが続いた後(スクロールは急停止せず、徐々にとまります)、完全停止した後に「scrollViewDidEndDecelerating:」がコールされます。
スクロール終了時の処理は、場合に応じてこの2つから選択すればよいと思います。
今回、これを利用した以下のようなサンプルアプリを作ってみました。

ViewControllerのViewにUITableViewとキャラクター画像のUIImageViewを貼付け、スクロールが開始すると、キャラクター画像を
アニメーションで徐々に透過し、スクロールが終了すると、今度はアニメーションで徐々に表示されるようにしました。
#import "ViewController.h" @interface ViewController () @end @implementation ViewController { NSArray *_fruitsArray; IBOutlet UITableView *_tableView; IBOutlet UIImageView *_charactor; } -(id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if(self){ _fruitsArray = @[@"apple",@"banana",@"grape",@"melon",@"strawberry",@"persimmon", @"kiwi fruit",@"cherry",@"plum",@"pear",@"pineapple",@"loquat"]; } return self; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_fruitsArray count]; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifer = @"cell"; UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:identifer]; if(!cell){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer]; } cell.textLabel.text = _fruitsArray[indexPath.row]; return cell; } -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [UIView animateWithDuration:0.5f animations:^{ _charactor.alpha = 0.0f; }]; } -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { [UIView animateWithDuration:0.5f animations:^{ _charactor.alpha = 1.0f; }]; }
UITableViewのdelegateの設定は、storyboardで行っています。
コメント
コメントの投稿
トラックバック
http://csfun.blog49.fc2.com/tb.php/120-09ea2ddf