iOS实现类似于歌词进度效果

先看效果

这里关键的地方在于镂空文字的实现,可以用UILabel的drawRect方法。

.h文件

@interface HollowLabel : UILabel

@end

.m文件

@interface HollowLabel(){
    NSString *_labelText;
    UIFont *_labelFont;
    UIColor *_labelBackgroundColor;
    CGRect _labelRect;
}

@end

@implementation HollowLabel

-(void)setText:(NSString *)text{
    _labelText = text;
}

-(void)setFont:(UIFont *)font{
    _labelFont = font;
}

-(void)setBackgroundColor:(UIColor *)backgroundColor{
    _labelBackgroundColor = backgroundColor;
}

//重写该方法,否则该方法会出问题
-(void)sizeToFit{

}

//禁止使用该方法初始化
-(instancetype)init{
    return nil;
}

-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        _labelRect = frame;
    }
    return self;
}

重要的是drawRect的实现

-(void)drawRect:(CGRect)rect{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [self drawHallowLabel:_labelText inRect:_labelRect inContext:ctx];
}

-(void)drawHallowLabel:(NSString *)labText inRect:(CGRect )labrect inContext:(CGContextRef )context{
    //记录上下文的当前状态
    CGContextSaveGState(context);
    //设置混合色
    CGContextSetBlendMode(context, kCGBlendModeDestinationOut);
    //lable上边添加label
    UILabel *lab = [[UILabel alloc]initWithFrame:labrect];
    lab.text = labText;
    lab.backgroundColor = _labelBackgroundColor;
    lab.font = _labelFont;
    lab.textAlignment = NSTextAlignmentCenter;

    [lab.layer drawInContext:context];
    //去除堆栈顶部的状态,返回到之前的上下文状态
    CGContextRestoreGState(context);
}

实现镂空文字后,再在HollowLabel下贴图,一层背景view,一层变色view,用NSTimer改变【变色view】的宽度就可以实现歌词效果。

时间: 2024-10-10 10:34:20

iOS实现类似于歌词进度效果的相关文章

iOS开发类似于呱呱卡效果,手指划过的区域形成画笔。适用于取出部分图片(截图),如截取出图片中带文字的区域部分。

HKBrushShots Demo下载地址: 类似于呱呱卡效果,手指划过的路线可以刮出痕迹. ??功能: 用于取出部分图片(截图),如截取出图片中带文字的区域部分. ??效果: 截取出图片中的“你就是我的全世界”文字区域的图片: 截取出图片中那只呆萌的小犀牛??: 更多截图效果: ??使用: 1 - 首先将工程中的“HKScreenShot”文件夹拷贝至项目中. 2 - 在需要使用的类中引入头文件: #import "HKCropView.h" #import "HKLine

android实现文字渐变效果和歌词进度的效果

要用TextView使用渐变色,那我们就必须要了解LinearGradient(线性渐变)的用法. LinearGradient的参数解释 LinearGradient也称作线性渲染,LinearGradient的作用是实现某一区域内颜色的线性渐变效果,看源码你就知道他是shader的子类. 它有两个构造函数 public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.T

iOS开发练习之UIPickerView实现歌词翻滚效果

麻雀虽小,五脏俱全.在平时的项目中,任何一个模块或者功能里其实都隐藏着许多我们平时注意不到的知识点,其实很多东西大家每天都在用,但很多时候都是知其然,而不知其所以然.时间久了,也就懒得去想到底是什么原因了,怎么实现的之类.回想自己的学习路程,也基本都这样混过来,实在愧对光阴,近日抽空,查看过往笔记,顺手写了个小代码练习,感觉温故知新.现分享代码,以供新手入门参考,尤其其中错误的部分也很有广泛性.同时也欢迎各路成精的老鸟们喷吐,能够指正,这样也促进我再进步一点. ViewController.m文

XE8 for iOS 状态栏的几种效果

XE8 实现 iOS 状态栏的几种效果: 一.状态栏底色: 开一个新工程. 设定 Fill.Color 颜色属性. 设定 Fill.Kind = Solid. 无需修改任何官方源码. 二.隐藏状态栏(全屏): 开一个新工程. 设定 BorderStyoe = None. 无需修改任何官方源码. 三.透明状态栏(能见底图): 开一个新工程. 设定底图 Fill.Bitmap.Bitmap. 设定 Fill.Bitmap.WrapMode = TitleStretch. 设定 Fill.Kind =

iOS.TextKit.01.凸版印刷效果

1.案例视图,如下图 2.代码 TextKit01ViewController.h #import <UIKit/UIKit.h> @interface TextKit01ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; // 文本可以排版的区域 @property (nonatomic,strong) NSTextContainer *textContai

IOS把图片做成圆形效果

利用CAShapeLayer可以制作出任意的几何图形,把它作为UIImageView的遮罩,达到把图片做成圆形效果. imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 35, 80, 80)]; imgView.image = [UIImage imageNamed:@"ma.jpg"]; UIBezierPath* path = [UIBezierPath bezierPathWithArcCenter:CGPoin

小tip: 使用SVG寥寥数行实现圆环loading进度效果

二.正文 设计师设计了一个图片上传圆环loading进度效果.如下截图: 首先,CSS3是可以实现的,以前写过一篇转大饼的文章:"CSS3实现鸡蛋饼饼状图loading等待转转转".原理跟这个一模一样,两个半区的矩形,然后不同时机巧妙显隐实现. 但是呢,CSS3实现不太好理解,进度控制也不容易,最好直接数值变一变,进度效果就出来. 有没有其他方法呢? 哈,当然有,可以使用同样IE9+支持的SVG. 我们只需要一个实线背景圆,一个虚线变化圆两个圆就可以了. 百闻不如一见,您可以狠狠地点击

Windows Phone中使用Storyboard做类似 IOS 屏幕小白点的效果

windows phone中做动画其实很方便的,可以使用Blend拖来拖去就做出一个简单的动画,下面做了一个 ios屏幕小白点的拖动效果,包括速度判断移动 使用Blend生成以下代码 <Storyboard x:Name="HandFunGTLSb"><!-- 向左滑动时动画 --> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransfo

ios点击产生波纹效果

ios点击产生波纹效果 by 伍雪颖 - (void)viewDidLoad { [super viewDidLoad]; RippleView = [[UIView alloc] initWithFrame:(CGRect){0,0,300,300}]; RippleView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; RippleView.layer.cornerRadius = 150; Rip