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开发 人工智能等 ,学无止境,希望这边文章能帮助开发小伙伴,再次也感谢我的小伙伴帮助我一起解决了这个滚动偏移问题,不过这篇文章没有用到
网友评论