1. iCarousel类的作用
iCarousel是一个类,它继承于UIView。用于简化实现各种类型的旋转木马(分页滚动视图)iPhone、iPad和Mac OS。iCarousel实现一些常见的影响如圆柱、平面式的旋转木马。经过 iCarousel类的封装,使iCarousel类的使用方式类似于UITableView的使用,每一个界面类似于一个单元格。 iCarousel类为我们提供了十几种分页效果,我们还可以使用 iCarousel类中的 (BOOL) vertical属性设置显示效果是垂直显示还是水平显示。
iCarousel类的实现方式,先通过( iCarouselDataSource)协议方法确定需要显示视图的个数,和创建需要显示的视图。 iCarousel内先创建一个可变字典,用于存储需要显示的单元格视图。创建一个父视图用于显示单元格视图,从字典中取出需要显示的单元格视图添加到创建父视图上,用于显示需要创建的单元格视图,在iCarousel类的内部对这些需要显示的单元格视图进行布局。
(1)iCarousel的几个重要的基本属性
iCarouselType; //视图的显示类型
iCarousel、的滑动效果,默认为YES
@property (nonatomic, assign, getter = isVertical) BOOL vertical; //设置单元格显示是水平或
垂直, 默认 NO(水平)
@property (nonatomic, assign) CGSize contentOffset; //用于设置滚动视图的水平位置
@property (nonatomic, assign) BOOL centerItemWhenSelected; //用于设置被选中的单元格在否在中心
显示 默认为YES
*@property (nonatomic, readonly, getter = isWrapEnabled) BOOL wrapEnabled; //设置是否启动旋转木
马效果/外部无法直接设置,默认为NO
iCarousel代理属性
@property (nonatomic, weak_delegate) IBOutlet id<</span>iCarouselDataSource> dataSource;
@property (nonatomic, weak_delegate) IBOutlet id<</span>iCarouselDelegate> delegate;
(2)iCarousel的代理方法与UITableView的代理方法实现有些相似,
@protocol iCarouselDataSource <<span class="s2">NSObject>
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel; //返回显示界面的个数
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView*)view; //返回每个需要显示的视图
@protocol iCarouselDelegate <<span class="s2">NSObject>//
@optional
- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value; //此协议方法可以设置每个视图之间的间隙的各种位置属性,还可以通过此协议方法设置是否采用旋转木马效果
2. iCarousel类的使用
(1)创建iCarousel类的对象
- (void)viewDidLoad
{
[super viewDidLoad];
iCarousel *iCarouselview = [[iCarousel alloc] initWithFrame:self.view.bounds];
//设置显示效果类型
iCarouselview.type = <span style="font-family: 'Microsoft YaHei', SimSun, Verdana, Arial, Helvetica, sans-serif; line-height: 1.5;">iCarouselTypeCylinder</span>;
//设置代理
iCarouselview.dataSource = self;
iCarouselview.delegate = self;
[self.view addSubview:iCarouselview];
}
#pragma mark iCarouselDataSource
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel{
return 100;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view{
UILabel *label = nil;
if (view == nil)
{
view =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 150.0f, 150.0f)] ;
view.backgroundColor = [UIColor blueColor];
label = [[UILabel alloc] initWithFrame:view.bounds];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.font = [label.font fontWithSize:50];
label.tag = 1;
[view addSubview:label];
}
else
{
label = (UILabel *)[view viewWithTag:1];
}
label.text = [NSString stringWithFormat:@"%d",index];
return view;
}
typedef enum
{
iCarouselOptionWrap = 0, //设置旋转木马效果
iCarouselOptionShowBackfaces,
iCarouselOptionOffsetMultiplier,
iCarouselOptionVisibleItems,
iCarouselOptionCount,
iCarouselOptionArc,
iCarouselOptionAngle,
iCarouselOptionRadius,
iCarouselOptionTilt,
iCarouselOptionSpacing, //设置视图间的间隙
iCarouselOptionFadeMin,
iCarouselOptionFadeMax,
iCarouselOptionFadeRange
}
iCarouselOption; //用于设置视图间间隙的各种属性
#pragma mark iCarouselDelegate
- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value{
switch (option)
{
case iCarouselOptionWrap:
{
//设置是否实现旋转木马效果
return YES;
}
case iCarouselOptionSpacing:
{
//设置没个界面直接的间隙,默认为0.25
return value * 2.0f;
}
default:
{
return value;
}
}
}