热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IOS游戏陪玩系统源码开发,滚动字幕的实现

水平连续滚动字幕:这种一看就是一组view放在scrollview实现的滚动,但是如何实现循环滚动呢,思路如下1:加入滚动字

水平连续滚动字幕:
这种一看就是一组view放在scrollview实现的滚动,但是如何实现循环滚动呢,思路如下
1:加入滚动字幕有五组文本,滚动到最后一组时,后面应该紧跟着第一组文本,如此才能实现连续滚动
2:我们可以把传入的文本个数翻倍,来实现最后一组文本后面又跟着第一组的文本(如果数据太少可以翻4倍,6倍,总之最好双倍数,否则x轴坐标处理会麻烦一点)
3:我们可以让滚动框在最后一个文本滚动消失后,重置滚动框的坐标,如此反复,就可以实现无线循环
在这里插入图片描述

//获取到最大滚动范围就可以启动滚动事件
-(void)setScrMaxW:(NSInteger)scrMaxW{_scrMaxW=scrMaxW;self.textScrollview.contentSize=CGSizeMake(scrMaxW, 0);[self addTimer];}

- (void)timerClick
{self.scrX=self.scrX+1;[UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{[self.textScrollview setContentOffset:CGPointMake(self.scrX, 0) animated:NO];} completion:nil];//滚动到可滚动区域的一半时重置if (self.textScrollview.contentOffset.x+1>=self.textScrollview.contentSize.width/2) {self.scrX=0;[self.textScrollview setContentOffset:CGPointMake(self.scrX, 0) animated:NO];}else{}}

水平翻页滚动字幕:
这种的更简单,只需要一个label,只要在滚动过程中不断地改变label展示文本就可以了
1:实时计算要加载的文本的宽度,加上屏宽*2,将label放在最中间
2:每次label消失之后,更新展示文本和滚动区域
3:展示完成最后一个文本后,文本下一个要再展示第一个文本实现循环
在这里插入图片描述
关键代码:

-(void)setTextArr:(NSMutableArray *)textArr{_textArr=textArr;self.txtLabel.text=textArr[0];self.scrollWidth=[self getTxtWidth:textArr[0]];// 初始展示的字幕可以根据需求调整,放在最左边或者默认在屏幕右侧[self.textScrollview setContentOffset:CGPointMake(ViewAllWidth, 0) animated:NO];// 初始展示文本下标self.arrNum=0;[self addTimer];}

- (void)timerClick
{self.scrX=self.scrX+1;[UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{[self.textScrollview setContentOffset:CGPointMake(self.scrX, 0) animated:NO];} completion:nil];if (self.textScrollview.contentOffset.x>=self.textScrollview.contentSize.width-ViewAllWidth) {[self refreshTxt];}else{}}-(void)refreshTxt{if (self.arrNum==self.textArr.count-1) {self.arrNum=0;}else{self.arrNum=self.arrNum+1;}self.txtLabel.text=self.textArr[self.arrNum];self.scrollWidth=[self getTxtWidth:self.textArr[self.arrNum]];self.scrX=0;[self.textScrollview setContentOffset:CGPointMake(self.scrX, 0) animated:NO];}-(void)setScrollWidth:(CGFloat)scrollWidth{_scrollWidth=scrollWidth;self.textScrollview.contentSize=CGSizeMake(scrollWidth+ViewAllWidth*2, 0);}

竖直多行翻页循环滚动:
大家看着这个动画是不是有一点熟悉,“拼夕夕”里面,拼单页面就有这样UI。
像这种第五个文本后面紧跟着第一个文本的,而且又是循环滚动的,其实思路和第一个水平滚动的是一样的,同样数据翻倍,滚动完一次重置,这样就可以实现循环
不过这里我换成了tableview来实现,没有用数组添加UI了
关键代码:

-(void)setSxArry:(NSMutableArray *)sxArry{_sxArry=sxArry;//将要显示的文本数量翻倍[_sxArry addObjectsFromArray:[NSArray arrayWithArray:sxArry]];}

-(void)scrollTableveiwcell{__weak typeof(self) weakSelf=self;// 整个滚动完一次,回到初始状态if (self.scrollSection==self.sxArry.count/2) {self.scrollSection=0;[self.fightTableView setContentOffset:CGPointMake(0, 0) animated:NO];}else{}[UIView transitionWithView: self.fightTableView duration:0.3 options: UIViewAnimationOptionTransitionNone animations: ^{[weakSelf.fightTableView setContentOffset:CGPointMake(0, weakSelf.fightTableView.contentOffset.y+cellHeight) animated:YES];} completion: ^(BOOL finished) {weakSelf.scrollSection=weakSelf.scrollSection+1;}];}

竖直翻页滚动字幕:
最后的这个滚动字幕实现方案很多,可以像上面水平翻页的思路一样,也可以添加上下两个label来循环展示文本实现,不过这里不用NSTimer也能实现

-(void)checkDataIndex{if (self.arrNum==self.sxArry.count-1) {self.arrNum=0;}else{self.arrNum=self.arrNum+1;}}- (void)scrollTxtAction {[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{CATransition *transition = [CATransition animation];transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];transition.type = kCATransitionPush;transition.subtype = kCATransitionFromTop;transition.delegate = self;[self.txtLabel.layer addAnimation:transition forKey:nil];[self checkDataIndex];} completion:^(BOOL finished) {self.txtLabel.text=self.sxArry[self.arrNum];dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self scrollTxtAction];});}];
}

最后要处理一下滚动区域的问题

//展示区域多余的部分截去,否则在动画滚动的时候,会跑到区域外面self.verBgView.layer.masksToBounds=YES;

以上就是IOS游戏陪玩系统源码开发,滚动字幕的实现的全部内容了,希望对大家有帮助。


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • C++ STL复习(13)容器适配器
    STL提供了3种容器适配器,分别为stack栈适配器、queue队列适配器以及priority_queue优先权队列适配器。不同场景下,由于不同的序列式 ... [详细]
  • RingBuffer,或者说CircularBuffer,是一个长度固定的缓冲区,当从一端插入元素超过指定的最大长度时,缓冲区另一端的元素 ... [详细]
  • 51nod3221祝寿(反向建图优化)
    题目链接感觉忘记了好多东西。求有向图中其余点到一个点的最短距离可以将该图翻转后rundijkstra#include#include ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • MVC中的自定义控件
    怎么样创建自定义控 ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • A-Score UVA-1585水 ... [详细]
author-avatar
如痴如醉as_961
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有