美文网首页
DYMarqueeView--一个可以高度自定义的iOS跑马灯

DYMarqueeView--一个可以高度自定义的iOS跑马灯

作者: rookiesss | 来源:发表于2020-03-16 16:35 被阅读0次

    先看看效果:


    效果图.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);
    

    如果最外层背景没有设置图片的话这么做完全没有问题的,代码也很简洁。
    如果最外层有背景图片怎么办???

    相关文章

      网友评论

          本文标题:DYMarqueeView--一个可以高度自定义的iOS跑马灯

          本文链接:https://www.haomeiwen.com/subject/ypxnehtx.html