照例先看下效果图:
思路
创建一个view
作为所有内容的父控件, 并且添加到上面一个 label
, 作为显示文字的载体
uilabel* contentlabel = [[uilabel alloc] init]; [contentlabel sizetofit]; contentlabel.backgroundcolor = [uicolor clearcolor]; _contentlabel = contentlabel; [self addsubview:self.contentlabel];
给内容view
的layer
添加一个mask
层, 并且设置其范围为整个view
的bounds
, 这样就让超出view
的内容不会显示出来
cashapelayer* masklayer = [cashapelayer layer]; masklayer.path = [uibezierpath bezierpathwithrect:self.bounds].cgpath; self.layer.mask = masklayer;
给label
添加动画
cakeyframeanimation* keyframe = [cakeyframeanimation animation]; keyframe.keypath = @"transform.translation.x"; keyframe.values = @[@(0), @(-space), @(0)]; keyframe.repeatcount = nsintegermax; keyframe.duration = self.speed * self.contentlabel.text.length; keyframe.timingfunctions = @[[camediatimingfunction functionwithname:kcamediatimingfunctioneaseineaseout], [camediatimingfunction functionwithcontrolpoints:0 :0 :0.5 :0.5]]; keyframe.delegate = self; [self.contentlabel.layer addanimation:keyframe forkey:nil];
使用方法
// 创建 cfdynamiclabel* testlabel = [[cfdynamiclabel alloc] initwithframe:cgrectmake(100, 300, 180, 21)]; // 设置滚动速度 testlabel.speed = 0.6; [self.view addsubview:testlabel]; // 设置基本属性 testlabel.text = @"我不想说再见,不说再见,越长大越孤单"; testlabel.textcolor = [uicolor yellowcolor]; testlabel.font = [uifont systemfontofsize:23]; testlabel.backgroundcolor = [uicolor graycolor];
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
如对本文有疑问, 点击进行留言回复!!
解决Android10读取不到/sdcard/、/storage/emulated/0/文件的问题
Codeforces Round #649 (Div. 2)-B. Most socially-distanced subsequence(思维)
IOS开发教程第一季之UI进阶day2合并IOS学习013--App启动过程、多控制器管理
网友评论