Cover Flow特効実装(2)


Cover Flow特効実装(1)
Cover Flow特効実装(2)
方法四:Tapkuフレームワーク
Tapkuライブラリは、CoverFlow、Calendar Grid、Char ViewなどのAPIを含むオープンソースiOSフレームワークであり、とにかく強力なライブラリです.Tapkuを工事中に追加するのはやはり複雑で、興味のある子供靴はネットで検索することができます.
Tapkuダウンロードアドレス:https://github.com/devinross/tapkulibrary
TapkuにおけるCover Flowに関連するクラスは主に以下の2つである.
TKCooverrflowCoverView:このクラスは単一のcoverを表します.UITableViewCell に相当
TKCoverflow:このクラスはUItableViewクラスに相当し、cover flowの画像の管理と表示、cover flow効果の実現に使用されます.
TKCoverflowViewDelegate、TKCoverflowViewDataSourceの2つのプロトコルがあります.TKCoverflowViewのエージェントとデータソースです.この2つのプロトコルにはそれぞれ実現しなければならない方法があります.それぞれは
//TKCoverflowViewDelegate   
- (void) coverflowView:(TKCoverflowView*)coverflowView coverAtIndexWasBroughtToFront:(int)index;
//TKCoverflowViewDataSource   
- (void) coverflowView:(TKCoverflowView*)coverflowView coverAtIndexWasDoubleTapped:(int)index

プロジェクトでの使用
TapkuのCoverFlow手順は次の通りです.
プロジェクト作成Tapkuライブラリをプロジェクトに追加します(この手順は少し面倒で、Tapkuライブラリは比較的大きいので、個人的にはCoverFlow関連のクラスだけを抽出して直接使うことができると思います).
次のコードを追加するビューコントローラCoverflowViewControlを新規作成します.
ヘッダファイルでh中
@interface CoverflowViewController : UIViewController <TKCoverflowViewDelegate,TKCoverflowViewDataSource,UIScrollViewDelegate> {
    TKCoverflowView *coverflow; 
    NSMutableArray *covers; // album covers images
    ......
}

CoverflowViewControllerでmファイルには主に以下の処理がある.
//    
- (void) loadView{
    [super loadView];
    ......
    coverflow = [[TKCoverflowView alloc] initWithFrame:self.view.bounds];
    coverflow.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    coverflow.coverflowDelegate = self;
    coverflow.dataSource = self;
    if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
        coverflow.coverSpacing = 100;
        coverflow.coverSize = CGSizeMake(300, 300);
    }
    [self.view addSubview:coverflow];
    ......
}

//      
- (void) coverflowView:(TKCoverflowView*)coverflowView coverAtIndexWasBroughtToFront:(int)index{
}

//    cover flow
- (TKCoverflowCoverView*) coverflowView:(TKCoverflowView*)coverflowView coverAtIndex:(int)index{
    TKCoverflowCoverView *cover = [coverflowView dequeueReusableCoverView];
    if(cover == nil){
        BOOL phone = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone;
        CGRect rect = phone ? CGRectMake(0, 0, 224, 300) : CGRectMake(0, 0, 300, 600);

        cover = [[[TKCoverflowCoverView alloc] initWithFrame:rect] autorelease]; // 224
        cover.baseline = 224;
    }
    cover.image = [covers objectAtIndex:index%[covers count]];

    return cover;
}

- (void) coverflowView:(TKCoverflowView*)coverflowView coverAtIndexWasDoubleTapped:(int)index{
    TKCoverflowCoverView *cover = [coverflowView coverAtIndex:index];
    if(cover == nil) return;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:cover cache:YES];
    [UIView commitAnimations];
    NSLog(@"Index: %d",index);
}

効果の比較
効果的には個人的にTapkuのほうがいいと思いますが、レンダリングがスムーズで、美には足りないのは、すばやくドラッグすると、止まったときに震える感じがします(もちろん、クイックドラッグという機能は状況によって異なりますが、この機能をオフにすると、アップル自身との効果はそれほど悪くありません).
OpenFlowの問題は、画像を変更すると、新しく選択した画像が拡大されて表層に配置され、その後、中間に緩やかになることです.これはその欠陥です.
全体的な感覚では、アップル自身のCoverFlowの緩動効果が最もよく、その漸進的な効果がありますが、上記のいくつかのオープンソースのライブラリのアニメーションは少し硬く見えますが、興味のある子供靴は改善してみてください.