iOS 中字体垂直滚动

2018-05-08  本文已影响0人  忆往不纠

iOS 中字体垂直滚动

1.实现思路:

1>.准备一个scrollView中

2>.动态创建一组buttons或label(注意:本篇文章用button实现)

3>.将一组button动态创建加入到一个 容器的containterView

4>.将容器的containterView加入到scrollView中

5>.动态计算一个scrollView种contentoffset 当滚动到最后一个时候,将containterView中frame更改到要显示的位置

6>.NStimer或是perform实现无限滚动(注意:这片文章用NStimer) 废话不说了直接上代码

2. 代码 

在.m文件中实现

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIScrollView *scrollMessageView;

@property (weak, nonatomic) IBOutlet UIView *vectorView;

@property (strong, nonatomic) UIView *containterView;

@property (strong, nonatomic) NSArray *models;

@property (strong, nonatomic) NSString *linkingUrl;

@property (nonatomic,strong) NSTimer *timer;

@end

#pragma mark - Private method

- (void)updateMessageWithGroupRestModels:(NSArray *)models {

    self.models = models;

    CGFloat buttonX = 0.0;

    CGFloat buttonY = 0.0;

    for (int i = 0;i

        NSString *model = models[i];

        buttonY = i *kDefaltVectorViewH;

        UIButton *messgaeButton = [[UIButton alloc]initWithFrame:CGRectMake(buttonX,buttonY,kDefaltVectorViewW,kDefaltVectorViewH)];

//使用button表方便处理处理点击事件

        messgaeButton.tag = i;

        [messgaeButtonsetTitleColor:[UIColor redColor] forState:UIControlStateNormal];

        [messgaeButton.titleLabel setFont:[UIFont systemFontOfSize:15.0]];

        [messgaeButtonaddTarget:self action:@selector(userDidClickMessageButton:) forControlEvents:UIControlEventTouchUpInside];

        messgaeButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

        [messgaeButtonsetTitle:model forState:UIControlStateNormal];

        [self.containterView addSubview:messgaeButton];

    }

}

#pragma mark - ScrollView method

- (void)scrollNextMessage {

    [self performSelector:@selector(scrollNextMessage) withObject:self afterDelay:3];

    float currentOffsetY = self.scrollMessageView.contentOffset.y;

    currentOffsetY +=kDefaltVectorViewH;

    NSInteger pageIndex = (currentOffsetY/ (self.models.count * kDefaltVectorViewH));

    if (pageIndex > 0) {

        self.containterView.frame = CGRectMake(0, pageIndex * self.models.count * kDefaltVectorViewH, kDefaltVectorViewH, self.models.count * kDefaltVectorViewH);

    }

    [UIView animateWithDuration:2 animations:^{

        [self.scrollMessageView setContentOffset:CGPointMake(0, currentOffsetY) animated:YES];

    }];

}

#pragma mark - Use Actions

- (void)userDidClickMessageButton:(UIButton*)button {

    NSLog(@"你点击的是第%ld按钮",(long)button.tag);

}

#pragma mark - Destroy timer

// 切记timer 不适用时要销毁 也可以选取 [self performSelector:@selector(scrollNextMessage) withObject:self afterDelay:3]; 这样就避免内存泄漏问题

- (void)dealloc {

    [self.timer invalidate];

    self.timer = nil;

}

@end

3.代码结束了,讨论一下在我开发的实际项目中遇到问题

    在写这个demo之前,在项目中真实遇到的,自己要自定义一个cell,实现这边文章的一个效果,结果遇到cell 第一次加载时候回出现滚动位置偏移,每次滚动偏移值都会加大,当滚动cell的时候,滚动cell到屏幕外面,再此加载的,滚动正常,不在偏移,后来在自己的思考和小伙伴讨论下,就可我做的项目首页东西特别多,页面相对复杂,CPU超负荷,没有及时计算正确,后来就在这个cell中加一个异步刷新,滚动就正常了,所以数这个iOS里面多线程掌握还是很必要的,有机会我会专门写一篇关于多线程使用文章,自己很少写文章,并不是不愿意分享,因为有时间我都用在学习其他的东西,例如 python开发 人工智能等 ,学无止境,希望这边文章能帮助开发小伙伴,再次也感谢我的小伙伴帮助我一起解决了这个滚动偏移问题,不过这篇文章没有用到

上一篇下一篇

猜你喜欢

热点阅读