1.iCarousel类的作用
iCarousel是一个类,它继承于UIView。用于简化实现各种类型的旋转木马(分页滚动视图)iPhone、iPad和Mac OS。iCarousel实现一些常见的影响如圆柱、平面式的旋转木马。经过 iCarousel类的封装,使iCarousel类的使用方式类似于UITableView的使用,每一个界面类似于一个单元格。 iCarousel类为我们提供了十几种分页效果,我们还可以使用 iCarousel类中的 (BOOL)vertical属性设置显示效果是垂直显示还是水平显示。
iCarousel类的实现方式,先通过( iCarouselDataSource)协议方法确定需要显示视图的个数,和创建需要显示的视图。 iCarousel内先创建一个可变字典,用于存储需要显示的单元格视图。创建一个父视图用于显示单元格视图,从字典中取出需要显示的单元格视图添加到创建父视图上,用于显示需要创建的单元格视图,在iCarousel类的内部对这些需要显示的单元格视图进行布局。
A、iCarousel的几个重要的基本属性
iCarouselType;//视图的显示类型
@property (nonatomic, assign, getter = isScrollEnabled) BOOL scrollEnabled; //设置在否启动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) id<iCarouselDataSource> dataSource;
@property (nonatomic, weak) id<iCarouselDelegate> delegate;
B、iCarousel的代理方法与UITableView的代理方法实现有些相似
@protocoliCarouselDataSource <NSObject>
- (NSUInteger)numberOfItemsInCarousel:(iCarousel*)carousel; //返回显示界面的个数
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView*)view; //返回每个需要显示的视图
@protocoliCarouselDelegate <NSObject>
@optional
- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value;//此协议方法可以设置每个视图之间的间隙的各种位置属性,还可以通过此协议方法设置是否采用旋转木马效果
2. iCarousel类的使用
A、创建iCarousel类的对象(例)
iCarousel *iCarouselview = [[iCarousel alloc] initWithFrame:self.view.bounds];
//设置显示效果类型
iCarouselview.type = iCarouselTypeCylinder;
//设置代理
iCarouselview.dataSource = self;
iCarouselview.delegate = self;
[self.view addSubview:iCarouselview];
B、实现代理协议
#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;
}
#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;
}
}
}
设置视图间间隙的各种属性
typedef enum{
iCarouselOptionWrap = 0, //设置旋转木马效果
iCarouselOptionShowBackfaces,
iCarouselOptionOffsetMultiplier,
iCarouselOptionVisibleItems,
iCarouselOptionCount,
iCarouselOptionArc,
iCarouselOptionAngle,
iCarouselOptionRadius,
iCarouselOptionTilt,
iCarouselOptionSpacing, //设置视图间的间隙
iCarouselOptionFadeMin,
iCarouselOptionFadeMax,
iCarouselOptionFadeRange
}iCarouselOption; //用于设置视图间间隙的各种属性
typedef NS_ENUM(NSInteger, iCarouselType){//展示样式
iCarouselTypeLinear = 0,//线性的
iCarouselTypeRotary,//可旋转的
iCarouselTypeInvertedRotary,//反向旋转式
iCarouselTypeCylinder,//圆柱式
iCarouselTypeInvertedCylinder,//反向圆柱式
iCarouselTypeWheel,//车轮式
iCarouselTypeInvertedWheel,//反向车轮式
iCarouselTypeCoverFlow,//封面流
iCarouselTypeCoverFlow2,//封面流样式2
iCarouselTypeTimeMachine,//时光机
iCarouselTypeInvertedTimeMachine,//反向时光机
iCarouselTypeCustom //你也可以使用iCarouselTypeCustom和carousel:itemTransformForOffset:baseTransform:代理方法来实现自己的定制carousel样式
};
问:如何实现view的点击事件?
实现协议方法 - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index; 即可
问:如何获取偏移量?
实现协议,然后如下使用- (void)carouselDidScroll:(iCarousel *)carousel{
NSLog(@"scrollOffset %f", carousel.scrollOffset);
}