开源地址:https://github.com/nicklockwood/iCarousel
iCarousel是一个基于scrollView的类,该类主要实现的效果类型是旋转。适用于iphone,iPad和macOS。iCarousel已经自带了很多基础效果。
iCarousel作为融入项目的第三方框架,有几大优势:
1. 只需要引入iCarousel.h 和 iCarousel.m 文件即可使用。
2. 该框架的API接口很方便,不至于使用者过多的修改内部实现。
3. 想要实现更多复杂的效果,使用该框架也能通过实现代理和数据源方法,轻松解决。
@property (nonatomic, strong) iCarousel icarouselView;
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.icarouselView];
[self.icarouselView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(0);
}];
}
- (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
return count;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)cell
{
if (!cell)
{
cell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}
cell.delegate = self;
return cell;
}
- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
static CGFloat max_sacle = 1.0f;
static CGFloat min_scale = 0.88f;
if (offset <= 1 && offset >= -1) {
float tempScale = offset < 0 ? 1+offset : 1-offset;
float slope = (max_sacle - min_scale) / 1;
CGFloat scale = min_scale + slope*tempScale;
transform = CATransform3DScale(transform, scale, scale, 1);
}else{
transform = CATransform3DScale(transform, min_scale, min_scale, 1);
}
return CATransform3DTranslate(transform, offset * 400 * 1.15, 0.0, 0.0);
}
- (iCarousel*)icarouselView
{
if(!_icarouselView)
{
_icarouselView = [[iCarousel alloc] init];
_icarouselView.type = iCarouselTypeCustom;
_icarouselView.delegate = self;
_icarouselView.dataSource = self;
_icarouselView.pagingEnabled = YES;
_icarouselView.bounces = NO;
_icarouselView.layer.cornerRadius = 2.f;
_icarouselView.layer.masksToBounds = YES;
}
return _icarouselView;
}
我只是在开发的过程中使用到了这个类并且简单的自定义功能,其实这个类自带的type就有很多的效果,建议在往后空余时间,研究一下这个类的内部实现,应该是不难的。