iOS 广告滚动效果

滚动原理

之前项目有一个简单的广告滚动效果,就自己动手写了一个,比较简单,原理就是两个label的循环替换,可以向上滚动和向下滚动。

实现

    YJAutoScrollLabel *autoScroll = [[YJAutoScrollLabel alloc] initWithFrame:CGRectMake(20, 100, self.view.frame.size.width - 40, 50) titles:@[@"123123123",@"456456456",@"789789789",@"147147147",@"258258258"]];
    [self.view addSubview:autoScroll];

开始滚动

[autoScroll beginScroll];

停止滚动

[autoScroll closeScroll];

广告消息的一些属性设置:

autoScroll.time = 2;//定时器轮询一次的时间 默认2s
autoScroll.adFontSize = 14;//广告文字字体大小 默认16
autoScroll.adTextAlignment = NSTextAlignmentCenter;//广告文本字体设置 默认NSTextAlignmentLeft
autoScroll.adColor = [UIColor redColor];//广告文字的颜色 默认黑色
autoScroll.adNumberOfLines = 0;//广告文字的行数  默认1行
autoScroll.isHaveTouchEvent = YES;//广告是否可以点击  默认不可点击
autoScroll.margen = 20;//广告文本距离左边的边距  默认是10

原理分析

  • 创建两个label,第一个是当前显示的label,第二个是隐藏的,处在view的上面或者下面(如果向上滚动,隐藏的label则在下面,如果向下滚动,隐藏的label则在上面)。
  • 设置第一个label的文字为数据源的第一条数据,然后显示。
  • 开启定时器循环,遍历当前view的subViews,根据label的text和广告数组index的数据相比,判断是currentLabel还是hiddenLabel。
    然后进行currentLabel和hiddenLabel向上或者向下滚动的动画,将currentLabel滚动到界外,将hiddenLabel滚动到当前显示。
    CGFloat labelY = self.directionType == YJScrollDirectionTypeTop ? -kHeight : kHeight;
    [UIView animateWithDuration:1 animations:^{
        currentLabel.frame = CGRectMake(_margen, labelY, kWidth - _margen, kHeight);
        hiddenLabel.frame = CGRectMake(_margen, 0, kWidth - _margen, kHeight);
    } completion:^(BOOL finished) {
        currentLabel.frame = CGRectMake(_margen, -labelY, kWidth - _margen, kHeight);
    }];
  • 动画结束,将currentLabel位置放在即将显示的位置。
    currentLabel.frame = CGRectMake(_margen, -labelY, kWidth - _margen, kHeight);
详情请见 demo

你可能感兴趣的:(iOS 广告滚动效果)