iOS实现循环滚动公告栏

2025-05-29 0 71

本文实例为大家分享了iOS实现循环滚动公告栏的具体代码,供大家参考,具体内容如下

封装了一个继承于UIView的类,如下:

?

1

2

3

4

5

6

7

8

9

10

11

12
#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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84
#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: - 开启定时器

- (void)openTimer {

if (!_scrollTimer) {

_scrollTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerMoved) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:_scrollTimer forMode:NSRunLoopCommonModes];

}

}

// MARK: - 关闭定时器

- (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: - 创建所有视图

- (void)createBaseView {

// 安全判断

if (self.titleArr.count == 0) {

return;

}

// 为了展示滑动过程的流畅性,重新处理数组

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: - 定时器调用方法

- (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调用代码:

?

1

2

3
XtayNoticeScrollView *notiView = [[XtayNoticeScrollView alloc] initWithFrame:CGRectMake(50, 100, self.view.frame.size.width-100, 50) titleArray:@[@"我是第一个数据-11111111111111", @"我是第二个数据-2222222", @"我是第三个数据-33333333"]];

[self.view addSubview:notiView];

运行后的效果视频:

iOS实现循环滚动公告栏

公告内容用的label,无点击效果,若需要。替换为button,添加手势,都可以。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS实现循环滚动公告栏 https://www.kuaiidc.com/89179.html

相关文章

发表评论
暂无评论