先看看效果:
效果图.gif
源码在这里 ,或者使用Cocoapod:
pod 'DYMarqueeView'
使用方法,类似于UITableView:
- (void)viewDidLoad {
_view2 = [[DYMarqueeView alloc] initWithFrame:CGRectMake(0, 350, [UIScreen mainScreen].bounds.size.width, 20) ScrollDirection:DYScrollDirectionLeft];
_view2.tag = 1000;
_view2.delegate = self;
_view2.waitDuration = 1;
[self.view addSubview:_view2];
[_view2 startScroll];
}
#pragma mark - DYMarqueeViewDelagete
- (NSInteger)numberOfMarqueeView:(DYMarqueeView *)marqueeView {
return 4;
}
- (UIView *)marqueeView:(DYMarqueeView *)marqueeView cellViewWithIndexPath:(NSIndexPath *)indexPath {
MarqueeTestCell *cell = [marqueeView dequeueReusableCellWithIndexPath:indexPath];
if (!cell) {
cell = [[MarqueeTestCell alloc] init];
}
cell.index = indexPath.row;
[cell.button setTitle:_dataArray[indexPath.row] forState:UIControlStateNormal];
return cell;
}
- (CGFloat)marqueeView:(DYMarqueeView *)marqueeView widthCellWithIndex:(NSInteger)index {
if (marqueeView.tag == 1000 ) {
return self.view.bounds.size.width;
}
return 50;
}
为是什么要使用CADisplayLink做动画?
如果使用CAAnimation因为机制问题,在移动过程中不能准确实现点击事件。CAAnimation动画在动画的第一帧cell实际响应区域就移动到了动画的终点位置,我们所看到的正在移动的cell并非响应区域,点击无效。
在反向移动时的骚操作。
向左移动做完再做向右移动,调整x移动方向?调整初始位置?
NO!NO!NO!
来看一波操作:
1.整体视图反向翻转
self.backView.transform = CGAffineTransformMakeScale(_scrollDirection, 1);
2.每个cell再次翻转
view.transform = CGAffineTransformMakeScale(_scrollDirection, 1);
如果最外层背景没有设置图片的话这么做完全没有问题的,代码也很简洁。
如果最外层有背景图片怎么办???
网友评论