代码改变世界

借助于开源框架AFOpenFlow来实现CoverFlow

2011-11-08 21:34  张智清  阅读(1093)  评论(0编辑  收藏  举报

在iPhone的SDK中有个UICoverFlowLayer类,可以用来实现CoverFlow效果。不过遗憾的是,该类属于私有API(嘿,苹果把好东西留给自己玩…...)我们无法使用该类。不过我们借助于开源框架AFOpenFlow来实现。

首先,需要在项目中添加OpenFlow开源框架([http://apparentlogic.com/openflow/]),并添加需要显示的图片。

再添加一个RootViewController作为默认页面,该类的头文件定义如下:

#import <UIKit/UIKit.h>

#import "AFOpenFlowView.h"

// 实现了AFOpenFlowViewDataSource和AFOpenFlowViewDelegate委托.

@interface ImageBrowserController : UIViewController<AFOpenFlowViewDataSource, AFOpenFlowViewDelegate> {

// 用来存储图片对象.

NSArray *coverImageData;

}

// 设置默认显示的图片.

- (void) imageDidLoad:(NSArray *)arguments;

@end


 

在RootViewController.m中,首先重载viewDidLoad方法,用于加载图并生成CoverFlow视图。

- (void)viewDidLoad{

// Use sample images, but load them all at once.

// Load Images.

coverImageData = [NSArray arrayWithObjects:[UIImage imageNamed:@"2569531.jpg"],

[UIImage imageNamed:@"2569547.jpg"],

[UIImage imageNamed:@"2569554.jpg"],

[UIImage imageNamed:@"V1440x900.jpg"],

[UIImage imageNamed:@"2569555.jpg"],

[UIImage imageNamed:@"2569562.jpg"],

[UIImage imageNamed:@"2569565.jpg"],

nil];

// Set the Images in OpenFlow View and set the count of images.

for (int i=0; i < [array count]; i++) {

[(AFOpenFlowView *)self.view setImage:[array objectAtIndex:i] forIndex:i];

}

[(AFOpenFlowView *)self.view setNumberOfImages:[array count]];

}


 

现在我们需要设置程序启动时默认显示的图片:

- (void) imageDidLoad:(NSArray *)arguments{

UIImage *loadedImage = (UIImage *) [arguments objectAtIndex:0];

NSNumber *imageIndex = (NSNumber *) [arguments objectAtIndex:1];

[(AFOpenFlowView *)self.view setImage:loadedImage forIndex:[imageIndex intValue]];

}



当然,怎么说我们这个仍是山寨CoverFlow效果,跟系统的CoverFlow还是有所区别,大家留意观察吧。