开源地址:https://github.com/nicklockwood/iCarousel
切换效果比较特别,都不是常见的切换效果,而且不带pageControl。效果可以在上面网址查看。
简单使用
- 初始化
_banner = [iCarousel new];
_banner.type = iCarouselTypeCylinder;// 必须在下面的之前设置,不然需要 reload
_banner.delegate = self;
_banner.dataSource = self;
/*
typedef NS_ENUM(NSInteger, iCarouselType)
{
iCarouselTypeLinear = 0, 平铺,不循环
iCarouselTypeRotary, 外环,层叠
iCarouselTypeInvertedRotary,内环,层叠
iCarouselTypeCylinder, 外环,拼接
iCarouselTypeInvertedCylinder,内环,拼接
iCarouselTypeWheel,车轮,扇形,影响比较大。
iCarouselTypeInvertedWheel,车轮,扇形,影响比较大。
iCarouselTypeCoverFlow,翻页 不循环
iCarouselTypeCoverFlow2,翻页2,不循环
iCarouselTypeTimeMachine,向上堆叠,不循环
iCarouselTypeInvertedTimeMachine,反堆叠,不循环
iCarouselTypeCustom
};
*/
- 常用代理
-(NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel{
return [self.dataSource count];
}
-(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{
if (view == nil) {
UIView *colorView = [UIView new];
colorView.backgroundColor = self.dataSource[index];
colorView.frame = CGRectMake(0, 0, 300, CGRectGetHeight(carousel.bounds));
return colorView;
}else{
view.backgroundColor = self.dataSource[index];
return view;
}
return nil;
}
- (void)carousel:(__unused iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index {
NSLog(@"Tapped view number: %ld", (long)index);
}
- (void)carouselCurrentItemIndexDidChange:(__unused iCarousel *)carousel {
NSLog(@"Index: %@", @(self.banner.currentItemIndex));
}
- 自己加个 pageControl
// 支持循环的 可用(最后一个的下一个是第0个)
if (index == [self.dataSource count] - 1) {
[carousel scrollToItemAtIndex:0 animated:YES];
} else {
[carousel scrollToItemAtIndex:index+1 animated:YES];
}
其他
其他属性和代理有很多。并没有深入使用,自定义3D 转场也是给跪了。一般使用差不多了。待研究。
1
网友评论
返回的option为iCarouselOptionWrap时,返回NO