気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
UITableViewはUIScrollViewを継承しているので、UITableViewのdelegateにUIScrollViewDelegateプロトコルを
採用したクラスを設定しておけば、そのクラスで、スクロールの開始、終了イベントの通知を受けることが出来ます。
(おそらく、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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。