向上轮播的公告信息显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向上轮播的公告信息显示相关的知识,希望对你有一定的参考价值。

 创建一个View

#import <UIKit/UIKit.h>

 

typedef void(^clickLabelBlock)(NSInteger index,NSString *titleString);

 

@interface CCPScrollView : UIView

 

/**

 *  文字数组

 */

@property (nonatomic,strong) NSArray *titleArray;

/**

 *  拼接后的文字数组

 */

@property (nonatomic,strong) NSMutableArray *titleNewArray;

/**

 *  是否可以拖拽

 */

@property (nonatomic,assign) BOOL isCanScroll;

/**

 *  block回调

 */

@property (nonatomic,copy)void(^clickLabelBlock)(NSInteger index,NSString *titleString);

/**

 *  字体颜色

 */

@property (nonatomic,strong) UIColor *titleColor;

/**

 *  背景颜色

 */

@property (nonatomic,strong) UIColor *BGColor;

/**

 *  字体大小

 */

@property (nonatomic,assign) CGFloat titleFont;

 

/**

 *  关闭定时器

 */

- (void)removeTimer;

 

/**

 *  添加定时器

 */

- (void)addTimer;

 

/**

 *  label的点击事件

 */

 

- (void) clickTitleLabel:(clickLabelBlock) clickLabelBlock;

 

@end

 

#import "CCPScrollView.h"

 

@interface CCPScrollView ()<UIScrollViewDelegate>

/**

 *  滚动视图

 */

@property (nonatomic,strong) UIScrollView *ccpScrollView;

/**

 *  label的宽度

 */

@property (nonatomic,assign) CGFloat labelW;

/**

 *  label的高度

 */

@property (nonatomic,assign) CGFloat labelH;

/**

 *  定时器

 */

@property (nonatomic,strong) NSTimer *timer;

/**

 *  记录滚动的页码

 */

@property (nonatomic,assign) int page;

 

@end

 

@implementation CCPScrollView

 

- (UIScrollView *)ccpScrollView {

    

    if (_ccpScrollView == nil) {

        

        _ccpScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];

        _ccpScrollView.showsHorizontalScrollIndicator = NO;

        _ccpScrollView.showsVerticalScrollIndicator = NO;

        _ccpScrollView.scrollEnabled = NO;

        _ccpScrollView.pagingEnabled = YES;

        [self addSubview:_ccpScrollView];

        

        [_ccpScrollView setContentOffset:CGPointMake(0 , self.labelH) animated:YES];

    }

    

    return _ccpScrollView;

}

 

 

- (instancetype)initWithFrame:(CGRect)frame {

    

    if (self = [super initWithFrame:frame]) {

        

        self.labelW = frame.size.width;

        

        self.labelH = frame.size.height;

        

        self.ccpScrollView.delegate = self;

        

        [self addTimer];

        

    }

    

    return self;

}

 

//重写set方法 创建对应的label

- (void)setTitleArray:(NSArray *)titleArray {

    

    _titleArray = titleArray;

    

    if (titleArray == nil) {

        [self removeTimer];

        return;

    }

    

    if (titleArray.count == 1) {

        [self removeTimer];

    }

    

    id lastObj = [titleArray lastObject];

    

    NSMutableArray *objArray = [[NSMutableArray alloc] init];

    

    [objArray addObject:lastObj];

    [objArray addObjectsFromArray:titleArray];

    

    self.titleNewArray = objArray;

    

    //CGFloat contentW = 0;

    CGFloat contentH = self.labelH *objArray.count;

    

    self.ccpScrollView.contentSize = CGSizeMake(0, contentH);

    

    CGFloat labelW = self.ccpScrollView.frame.size.width;

    self.labelW = labelW;

    CGFloat labelH = self.ccpScrollView.frame.size.height;

    self.labelH = labelH;

    CGFloat labelX = 0;

    

    //    //防止重复赋值数据叠加

    //    for (id label in self.ccpScrollView.subviews) {

    //

    //        [label removeFromSuperview];

    //

    //    }

    

    [self.ccpScrollView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

        

        [obj removeFromSuperview];

    }];

    

    for (int i = 0; i < objArray.count; i++) {

        

        UILabel *titleLabel = [[UILabel alloc] init];

        

        titleLabel.userInteractionEnabled = YES;

        

        titleLabel.tag = 100 + i;

        

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickTheLabel:)];

        

        [titleLabel addGestureRecognizer:tap];

        

        titleLabel.textAlignment = NSTextAlignmentLeft;

        

        CGFloat labelY = i * labelH;

        

        titleLabel.frame = CGRectMake(labelX, labelY, labelW, labelH);

        

        titleLabel.text = objArray[i];

        

        [self.ccpScrollView addSubview:titleLabel];

        

    }

    

}

 

- (void)clickTheLabel:(UITapGestureRecognizer *)tap {

    

    if (self.clickLabelBlock) {

        

        NSInteger tag = tap.view.tag - 1;

        

        if (tag < 100) {

            

            tag = 100 + (self.titleArray.count - 1);

            

        }

        

        self.clickLabelBlock(tag - 100,self.titleArray[tag - 100]);

        

    }

    

}

 

- (void) clickTitleLabel:(clickLabelBlock) clickLabelBlock {

    

    self.clickLabelBlock = clickLabelBlock;

    

}

 

- (void)setIsCanScroll:(BOOL)isCanScroll {

    

    if (isCanScroll) {

        

        self.ccpScrollView.scrollEnabled = YES;

        

    } else {

        

        self.ccpScrollView.scrollEnabled = NO;

        

    }

    

}

 

- (void)setTitleColor:(UIColor *)titleColor {

    

    _titleColor = titleColor;

    

    for (UILabel *label in self.ccpScrollView.subviews) {

        

        label.textColor = titleColor;

        

    }

}

 

- (void)setTitleFont:(CGFloat )titleFont {

    

    _titleFont = titleFont;

    

    for (UILabel *label in self.ccpScrollView.subviews) {

        

        label.font = [UIFont systemFontOfSize: titleFont];;

        

    }

    

}

 

- (void)setBGColor:(UIColor *)BGColor {

    

    _BGColor = BGColor;

    

    self.backgroundColor = BGColor;

    

}

 

- (void)nextLabel {

    

    CGPoint oldPoint = self.ccpScrollView.contentOffset;

    oldPoint.y += self.ccpScrollView.frame.size.height;

    [self.ccpScrollView setContentOffset:oldPoint animated:YES];

    

}

//当滚动时调用scrollView的代理方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    

    if (self.ccpScrollView.contentOffset.y == self.ccpScrollView.frame.size.height*(self.titleArray.count )) {

        

        [self.ccpScrollView setContentOffset:CGPointMake(0, 0) animated:NO];

        

    }

    

}

 

 

// 开始拖拽的时候调用

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

    

    [self removeTimer];

}

 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

    //开启定时器

    [self addTimer];

}

 

- (void)addTimer{

    

    /*

     scheduledTimerWithTimeInterval:  滑动视图的时候timer会停止

     这个方法会默认把Timer以NSDefaultRunLoopMode添加到主Runloop上,而当你滑tableView的时候,就不是NSDefaultRunLoopMode了,这样,你的timer就会停了。

     self.timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(nextLabel) userInfo:nil repeats:YES];

     */

    

    self.timer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(nextLabel) userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}

 

- (void)removeTimer {

    

    [self.timer invalidate];

    self.timer = nil;

}

 

- (void)dealloc {

    

    [self.timer invalidate];

    self.timer = nil;

    

}

 

@end

 你需要显示的界面

#import "CCPScrollView.h"

 

下边的东西起一个方法,调用就好

 

CCPScrollView *ccpView = [[CCPScrollView alloc] initWithFrame:CGRectMake(65, 0, self.testView.frame.size.width - 60, self.testView.frame.size.height)];

    ccpView.titleArray = _gonggaoshuzu;

   

    ccpView.titleFont = 14;

    

    ccpView.titleColor = [UIColor blackColor];

    

    ccpView.BGColor = CCPRGBColor(255, 255, 255);

    

    [ccpView clickTitleLabel:^(NSInteger index,NSString *titleString) {

        

        NSLog(@"%ld-----%@",(long)index,titleString);

        

        //自定义的弹出view

        UIView *alertView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width - 15 * 2, 250)];

        

        alertView.backgroundColor = [UIColor whiteColor];

        

        alertView.layer.cornerRadius = 8;

        

        alertView.layer.masksToBounds = YES;

        

        UILabel *alertLabel = [[UILabel alloc] init];

        

        alertLabel.textAlignment = NSTextAlignmentLeft;

        

        alertLabel.text = titleString;

        

        alertLabel.font = [UIFont systemFontOfSize:17];

        

        alertLabel.numberOfLines = 0;

        

        alertLabel.width =  [UIScreen mainScreen].bounds.size.width - 15 * 2;

        [alertLabel sizeToFit];

        alertLabel.centerX = alertView.centerX;

        alertLabel.centerY = alertView.centerY;

        [alertView addSubview:alertLabel];

        //弹出自定义弹窗

        CCPActionSheetView *actionSheetView = [[CCPActionSheetView alloc] initWithAlertView:alertView];

        actionSheetView.viewAnimateStyle = ViewAnimateScale;

    }];

    [self.testView addSubview:ccpView];

以上是关于向上轮播的公告信息显示的主要内容,如果未能解决你的问题,请参考以下文章

02微信小程序-轮播的宽度100%显示和轮播的基础配置

jQuery 文字向上轮播

如何从 vuetify 轮播中向上移动箭头

在 Flutter 中使用 GridView 时使轮播向上滚动

JS新闻公告文字逐条向上翻滚代码

将 Slick 轮播水平箭头更改为带有字体真棒箭头的向上和向下箭头