iOS实现滚动字幕的动画特效_IOS

效果图

开始上代码

滚动字幕的原理是用timer定时器间隔一定的时间来驱动scrollView上的内容偏移,来实现滚动的效果,原理比较简单,关键是有些细节需要处理好,实现流畅效果的同时要考虑到性能优化

这里是.h文件的接口方法及属性,可适应大部分自定义场景

/*初始化*/
-(instancetype)initWithFrame:(CGRect)frame textArray:(NSArray *)textArray colorArray:(NSArray *)textColorArray;

//滚动字幕数组
@property(nonatomic,strong) NSArray<NSString *> *textArray;

//字幕颜色数组
@property(nonatomic,strong) NSArray<UIColor *> *textColorArray;

//字幕背景颜色
@property(nonatomic,strong) UIColor *backgroundColorOfCanvas;

//标签背景图片
@property(nonatomic,strong) UIImage *backgroundImageOfCanvas;

//字体大小
@property(nonatomic,assign) CGFloat fontOfSize;

//定时器
@property(nonatomic,strong) NSTimer *timer;

实现滚动字幕的思路和无限轮播图相似,这里用了一点小技巧即可实现字幕的收尾连续相接:将同样的字幕内容复制一份拼接到后面就可以了,当字幕的scrollView滚动到复制的那份内容开头时,将contentOffset偏移量设置到原始内容的开头,这样就可以实现无缝的连续循环滚动了

#pragma mark - 创建scrollView内容
-(void)createContentOfScrollView{

 //创建contentView
 self.contentSize=CGSizeMake(0, self.bounds.size.height);

 //偏移量初值设为0
 self.contentOffset=CGPointMake(0, 0);

 //关闭指示条
 self.showsHorizontalScrollIndicator=NO;

 //创建label

 CGFloat labelY=0;
 CGFloat labelW=200;
 CGFloat labelH=self.bounds.size.height;

 //添加两次一样的内容,无限循环使用
 for (int j=0; j<2;j++ ) {

 for (int i=0; i<self.textArray.count; i++) {

 UILabel *textLabel=[[UILabel alloc] initWithFrame:CGRectMake(self.contentSize.width, labelY, labelW, labelH)];

 //******标签背景******
 UIImageView *labelBackGroundView=[[UIImageView alloc] initWithFrame:textLabel.frame];

 //标签背景图片
 labelBackGroundView.image=self.backgroundImageOfCanvas;

 //*****label文字******
 if (i<self.textArray.count) {
  textLabel.text=self.textArray[i];
 }else{
  textLabel.text=@"----";
 }

 //label文字颜色(判断文字颜色数组是否存有对应的颜色,没有则使用默认颜色)
 if (i<self.textColorArray.count) {
  textLabel.textColor=self.textColorArray[i];
 }else{
  //默认颜色
  textLabel.textColor=[UIColor blackColor];
 }

 //******字体大小********
 textLabel.font=[UIFont systemFontOfSize:self.fontOfSize];

 //label标签tag值
 textLabel.tag=LABEL_TAG_INIT + i + 100 * j;

 //每创建一个label在contenSize上加上一个label的宽度
 self.contentSize=CGSizeMake(self.contentSize.width+labelW, self.bounds.size.height);

 [self addSubview:labelBackGroundView];
 [self addSubview:textLabel];

 }
 }

}

这里注意定时器timer的使用,要将timer加入到runloop里,注意是CommonModes,如果用defaultModes的话就会出现卡顿(与滑动等事件处于同一runLoop,系统会优先响应滑动)

小tips:定时器是可以暂停的

NSTimer 系统是没有提供暂停的方法的,方法列表中只提供了-fire(启动) 和 -invalidate(废除)两个方法,invalidate后是完全废除不可再重启

但是这里有个@property (copy) NSDate *fireDate的属性,我们可以借助这个属性来实现定时器的暂停和重启

 //立即启动定时器
 [timer setFireDate:[NSDate date]];

//暂停定时器
 [timer setFireDate:[NSDate distantFuture]];

是不是有种很奇妙的感觉,这里利用定时器的启动时间属性巧妙的达到了暂停和重启的目的

//************自动滚动timer************
 NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:SCROLL_TIME_INTERVAL target:self selector:@selector(autoScroll) userInfo:nil repeats:YES];

 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

 //立即启动定时器
 [timer setFireDate:[NSDate date]];

 self.timer=timer;

这里是定时器驱动scrollView滚动的方法

这里注意了如果要达到字幕连续滚动不断帧的效果的话,timer调用需要非常频繁(1秒调用10次以上),此时再看看CPU使用率.瞬间飙升了20%左右,虽然还在能接受的范围,但在这种小地方耗费CPU显然不划算

解决方法:给个动画过渡就好了嘛,UIView animateWithDuration轻松应付,过渡很流畅,世界也瞬间安静了。

后遗症:用动画过渡唯一的问题就是,控制器跳转后再回来的话,动画会直接结束跳到尾帧,细心的用户会发觉这奇怪的地方,这就只有在性能和效果之间调和一下取最优解了

//滚动时间间隔
#define SCROLL_TIME_INTERVAL 3

//每次滚动距离
#define SCROLL_DISTANCE 100
//自动滚动
- (void)autoScroll{

 //滚动速度
 CGFloat offSet=SCROLL_DISTANCE;

 //若果字幕滚动到第二部分重复的部分则把偏移置0,设为第一部分,实现无限循环
 if (self.contentOffset.x>=self.contentSize.width / 2) {

 self.contentOffset=CGPointMake(0, 0);
 }

 //切割每次动画滚动距离

 [UIView animateWithDuration:SCROLL_TIME_INTERVAL delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
  self.contentOffset=CGPointMake(self.contentOffset.x+offSet, self.contentOffset.y);
 } completion:nil];
}

总结

好了,以上就是这篇文章的全部内容了,亲们有什么意见和问题记得及时反馈哦,希望这篇文章的内容对大家的学习或者工作带来一定的帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, 滚动字幕
循环滚动字幕
滚动字幕特效代码大全、html5 字幕滚动特效、滚动字幕特效大全、pr字幕动画特效、ios滚动字幕实现代码,以便于您获取更多的相关知识。

时间: 2024-10-26 09:46:22

iOS实现滚动字幕的动画特效_IOS的相关文章

IOS框架Spring常用的动画效果_IOS

Spring 作用:开发中常用的动画效果及自定义转场动画 演示 介绍 SpringView 最重要的一个类,是一个继承自UIView的控件,所有的动画属性,都是围绕着这个类的对象 demo跑起来有一个code按钮,点击这个按钮会出现已经设置的动画属性及其api,自己可以自定义设置,其对应的api这里就不赘述了(上面的gif图片也可以看到) demo里code按钮点开显示的layer对象是用SpringView创建的对象,不是我们平时说的layer animateNext(completion:

iOS动画实现雨花与樱花特效_IOS

先来看看效果图: 下面直接上代码: 粒子特效的话我只服苹果系统的,CAEmitter粒子特效提供了非常丰富的属性来实现各种效果(雨滴.雪花.流星),用法简单B格高.首先创建好CAEmitterLayer粒子发射器图层,CAEmitterCell粒子单元,然后根据需要设置somany粒子单元的属性就OK了,最后注意要将粒子发射器图层的layer添加到整个背景的sublayer上. @interface XMWeatherView () @property(nonatomic,strong) CAE

PPT动画教程:字幕式动画

今天我们用动画的形式介绍在Powerpoint演示文稿中设置字幕式动画的方法和技巧. 我们经常看到一些课件在播放过程中,一些字符从左向右(从下向上)滚动出现,这种效果在PowerPoint中可以用"字幕式"动画来实现. 1.将字符输入到一个文本框中. 2.选中文本框,单击"自定义动画"任务窗格中的"添加动画"按钮,在随后弹出的快捷菜单中,展开"进入"下面的级联菜单,选中"字幕式"动画选项就行了. 注意:如果

如何在ppt中插入滚动字幕的效果

  在ppt中插入滚动字幕的效果的方法: 打开powerpoint,新建一空白幻灯片. 点击菜单"插入"-----"文本框"-----"水平" 在幻灯片上拉出一个长方形文本框,输入所需文字,如"祝大家新年快乐!",然后调整字体和颜色. 把文本框拉到幻灯片左边页面区域以外的位置. 选中文本框,右键"自定义动画" 在界面右边"自定义动画"编辑栏中,"添加效果"-----&

PPT中实现滚动字幕

  整张ppt的滚动字幕很好制作,我们只需要将文字拖出画板外,设置路径动画即可,但是,如果是在ppt中特定的区域设置滚动字幕该怎么办呢,废话不多说,上图解释. 这是制作完成后的效果. 首先,将字幕的背景底图插入,置于底层,然后将此页幻灯片保存为图片,名称为"画轴背景". 在ppt中插入"画轴背景"这张图片,通过裁剪功能分别截出画轴的上半部分和下半部分,并覆盖在原来的位置上. 在幻灯片的画布外下方插入文本框输入文字,并设置直线动画,将刚刚截出的"上部分&qu

使用UILabel实现滚动字幕移动效果

使用UILabel实现滚动字幕移动效果 这个链接中的代码也实现了这种效果 https://github.com/cbpowell/MarqueeLabel   最终效果如下: 原理如下: 1. 获取文本 2. 计算文本宽度 3. 将这个Label放入ScrollView中 4. 将ScrollView的contentSize的宽度设置与文本宽度一致 5. 做动画 *6. 边缘的渐隐效果请使用带透明像素的PNG图片 // // RootViewController.m // // Copyrigh

会声会影滚动字幕效果怎么制作

1.打开会声会影x5,插入想要制作滚动字幕的视频,点击T按键,输入文字,并调整字体的格式以及背景颜色. 2.选择属性,打开后选择其中的应用选项,然后选择飞行效果 3.选择自定义动画属性,选择下图的红色方框的选项,然后点击播放按钮,浏览即可 好了以上就是小编为大家整理的一篇关于会声会影滚动字幕效果制作全部操作流程了,希望这篇文章可以为大家带来帮助的呀.

jQuery实现分章节锚点“回到顶部”动画特效代码_jquery

本文实例讲述了jQuery实现分章节锚点"回到顶部"动画特效.分享给大家供大家参考,具体如下: 这里演示基于jquery实现的分章节动画实现"回到顶部"的效果,可通过 网页顶部的数字序号直接进入网页的章节,当处于第二章节的时候,网页右侧会显示竖排的控制按钮,点击按钮会回到相应章节,其实也就是定义好的锚点,当然也可回到顶部,网页上见到的回顶部大多不是这个样子,所以本款效果还挺新颖. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js

会声会影如何制作滚动字幕,会声会影制作滚动字幕教程

视频制作完成后我们往往会涉及到个声音进行配字,在这种情况下就经常会用到滚动字幕,下面小编就来分享一下如何通过会声会影给影片添加滚动字幕. 1.打开会声会影视频编辑软件,点击标题的图标,在预览窗口会出现"双击这里可以添加标题"的字样,在此处双击,输入要添加的文字内容.   图一:添加文字 2.在右面的"编辑"面板中,设置字体为"楷体",字号为"40",文字颜色选择"黄色".   图二:设置文字格式 3.接下来