先展示效果吧:
LabelScroll.gif设计思路:
- 在自定义view上添加上、下两个label,两个label的高度都等于view的高度
UILabel *up = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
[self addSubview:up];
_upLabel = up;
UILabel *down = [[UILabel alloc] initWithFrame:CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height)];
[self addSubview:down];
_downLabel = down;
- 同时向上移动,当上面的upLabel移出view同时,downLabel的frame正好等于父view的frame,此时将upLabel的frame修改为之前downLabel的frame,相当于upLabel和downLabel互换frame
[UIView animateWithDuration:AniDuration animations:^{
if (self.upLabelIsUP == YES) {
self.upLabel.frame = CGRectMake(0, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
self.downLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}else {
self.downLabel.frame = CGRectMake(0, -self.frame.size.height, self.frame.size.width, self.frame.size.height);
self.upLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
} completion:^(BOOL finished) {
//upLabel在downLabel上面
if (self.upLabelIsUP == YES) {
self.upLabel.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height);
self.upLabelIsUP = NO;
}else {
//downLabel在upLabel上面
self.downLabel.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, self.frame.size.height);
self.upLabelIsUP = YES;
}
}];
- 设置label的文字
- (void)setLabelTxt {
//currentIndex为当前展示的数据源中的index
if (self.currentIndex == self.dataSource.count) {
self.currentIndex = 0;
}
if (self.currentIndex % 2 == 0) {
self.upLabel.text = [self.dataSource objectAtIndex:self.currentIndex];
}else {
self.downLabel.text = [self.dataSource objectAtIndex:self.currentIndex];
}
self.currentIndex ++;
}
- 设置数据源, 由于只有2个label,所以上面设置label文字时候,用self.currentIndex % 2 == 0判断,会在dataSource的个数是奇数时出现问题,大家可以自己试试,想了下一个简单的方式就是当个数是奇数时,数据源*2,得到的就是偶数个了
- (void)setDataSource:(NSMutableArray *)dataSource {
_dataSource = dataSource;
if (self.dataSource.count == 0) {
return;
}
if (dataSource.count%2 == 1) {
//个数为奇数时,乘以2,总个数就是偶数了,ojbk
[dataSource addObjectsFromArray:dataSource];
}
[self setLabelTxt];
[self setLabelTxt];
[self addTimer];
}
5)还有定时器,等等一些小细节,都在代码里
网友评论