iOS實(shí)現(xiàn)循環(huán)滾動(dòng)公告欄
本文實(shí)例為大家分享了iOS實(shí)現(xiàn)循環(huán)滾動(dòng)公告欄的具體代碼,供大家參考,具體內(nèi)容如下
封裝了一個(gè)繼承于UIView的類,如下:
#import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface XtayNoticeScrollView : UIView - (instancetype)initWithFrame:(CGRect)frame titleArray:(NSArray<NSString *> *)titleArray; - (void)openTimer; - (void)closeTimer; @end NS_ASSUME_NONNULL_END
#define ROW_H self.bounds.size.height
#import "XtayNoticeScrollView.h"
@interface XtayNoticeScrollView ()
/// scrollView
@property (nonatomic, strong) UIScrollView *bgScrollView;
/// titleArr
@property (nonatomic, copy) NSArray *titleArr;
/// timer
@property (nonatomic, strong) NSTimer *scrollTimer;
@end
@implementation XtayNoticeScrollView
- (instancetype)initWithFrame:(CGRect)frame titleArray:(NSArray<NSString *> *)titleArray {
self = [super initWithFrame:frame];
if (self) {
self.titleArr = titleArray;
[self addSubview:self.bgScrollView];
[self createBaseView];
[self openTimer];
}
return self;
}
// MARK: - 開啟定時(shí)器
- (void)openTimer {
if (!_scrollTimer) {
_scrollTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerMoved) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:_scrollTimer forMode:NSRunLoopCommonModes];
}
}
// MARK: - 關(guān)閉定時(shí)器
- (void)closeTimer {
[_scrollTimer invalidate];
_scrollTimer = nil;
}
- (UIScrollView *)bgScrollView {
if (!_bgScrollView) {
_bgScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
_bgScrollView.scrollEnabled = NO;
_bgScrollView.showsVerticalScrollIndicator = NO;
_bgScrollView.showsHorizontalScrollIndicator = NO;
_bgScrollView.backgroundColor = UIColor.whiteColor;
}
return _bgScrollView;
}
// MARK: - 創(chuàng)建所有視圖
- (void)createBaseView {
// 安全判斷
if (self.titleArr.count == 0) {
return;
}
// 為了展示滑動(dòng)過程的流暢性,重新處理數(shù)組
NSMutableArray *dataMArray = [NSMutableArray arrayWithCapacity:0];
[dataMArray addObjectsFromArray:_titleArr];
[dataMArray addObject:_titleArr.firstObject];
for (int i = 0; i<dataMArray.count; i++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, ROW_H*(i%dataMArray.count), self.bgScrollView.bounds.size.width, ROW_H)];
label.text = dataMArray[i];
label.font = [UIFont systemFontOfSize:15];
label.textColor = [UIColor blackColor];
label.numberOfLines = 0;
[_bgScrollView addSubview:label];
}
_bgScrollView.contentSize = CGSizeMake(0, ROW_H*dataMArray.count);
}
// MARK: - 定時(shí)器調(diào)用方法
- (void)timerMoved {
CGFloat pageY = self.bgScrollView.contentOffset.y/ROW_H;
int pageIntY = pageY;
if (pageIntY >= self.titleArr.count) {
[self.bgScrollView setContentOffset:CGPointMake(0, 0) animated:NO];
} else {
[self.bgScrollView setContentOffset:CGPointMake(0, (pageIntY+1)*ROW_H) animated:YES];
}
}
VC調(diào)用代碼:
XtayNoticeScrollView *notiView = [[XtayNoticeScrollView alloc] initWithFrame:CGRectMake(50, 100, self.view.frame.size.width-100, 50) titleArray:@[@"我是第一個(gè)數(shù)據(jù)-11111111111111", @"我是第二個(gè)數(shù)據(jù)-2222222", @"我是第三個(gè)數(shù)據(jù)-33333333"]]; [self.view addSubview:notiView];
運(yùn)行后的效果視頻:

公告內(nèi)容用的label,無點(diǎn)擊效果,若需要。替換為button,添加手勢(shì),都可以。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS中 UIImage根據(jù)屏寬調(diào)整size的實(shí)例代碼
最近做項(xiàng)目遇到這樣一個(gè)需求,要求UIImage根據(jù)屏幕寬度按照自己本身比例改變高度,下面通過本文給大家分享iOS UIImage根據(jù)屏寬調(diào)整size的實(shí)例代碼,需要的朋友參考下吧2017-01-01
iOS動(dòng)畫實(shí)現(xiàn)雨花與櫻花特效
小編今天為大家?guī)硪粓?chǎng)淅淅瀝瀝的夜空之雨和滿天飛舞的櫻花之戀,希望能在炎炎夏日為您帶來一絲清爽的涼意!學(xué)習(xí)iOS動(dòng)畫的小伙伴們可以參考學(xué)習(xí)。2016-08-08
iOS使用CoreMotion實(shí)現(xiàn)搖一搖功能
這篇文章主要為大家詳細(xì)介紹了iOS使用CoreMotion實(shí)現(xiàn)搖一搖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
iOS編程學(xué)習(xí)中關(guān)于throttle的那些事
這篇文章主要給大家介紹了關(guān)于iOS編程學(xué)習(xí)中throttle的那些事,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位iOS的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
IOS中用正則表達(dá)式判斷輸入的內(nèi)容為8-16位且同時(shí)包含數(shù)字和字母
這篇文章主要介紹了IOS中用正則表達(dá)式判斷輸入的內(nèi)容為8-16位且同時(shí)包含數(shù)字和字母,需要的朋友可以參考下2017-06-06
iOS中tableview實(shí)現(xiàn)編輯、全選及刪除等功能的方法示例
這篇文章主要給大家介紹了關(guān)于iOS中tableview實(shí)現(xiàn)編輯、全選及刪除等功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),不僅是介紹實(shí)現(xiàn)的方法,將實(shí)現(xiàn)過程中遇到的問題也都分享出來了,需要的朋友們下面來一起看看吧。2017-07-07
詳解iOS App中UISwitch開關(guān)組件的基本創(chuàng)建及使用方法
UISwitch組件就是我們平時(shí)在iOS設(shè)置菜單中開到的那種左右滑動(dòng)的開關(guān)按鈕,當(dāng)然我們?cè)陂_發(fā)時(shí)可以進(jìn)行更多的自定義,這里我們就來詳解iOS App中UISwitch開關(guān)組件的基本創(chuàng)建及使用方法2016-05-05
IOS 獲取已連接的wifi信息的實(shí)現(xiàn)代碼
這篇文章主要介紹了IOS 獲取已連接的wifi信息的實(shí)現(xiàn)代碼的相關(guān)資料,這里提供實(shí)現(xiàn)代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08

