今天给播放器更换了字幕展示风格,在这里简单记录一下,因为字幕和别的普通UILabel
展示有点不一样,因为播放器播放视频的时候有各种颜色,所以就要求不管什么背景颜色下用户都需要清楚的看到字幕,所以首先肯定是不能直接使用单色,我刚开始使用了添加阴影,后来产品说有点不清晰,今天又改成了描边,两个效果对比个人觉得描边效果更好一点
效果
-
阴影
-
描边
实现
- 阴影
self.layer.shadowColor = UIColor.blackColor.CGColor;
self.layer.shadowOffset = CGSizeMake(2, 2);
self.layer.shadowOpacity = 0.8;
self.layer.shadowRadius = 4;
- 描边
- (void)drawTextInRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
// 设置描边宽度
CGContextSetLineWidth(c, 1);
CGContextSetLineJoin(c, kCGLineJoinRound);
CGContextSetTextDrawingMode(c, kCGTextStroke);
// 描边颜色
self.textColor = [UIColor blackColor];
[super drawTextInRect:rect];
// 文本颜色
self.textColor = [UIColor whiteColor];
CGContextSetTextDrawingMode(c, kCGTextFill);
[super drawTextInRect:rect];
}
备注:上面👆🏻的方法是UILabel
的方法,所以自定义之后在.m
文件中粘贴这个方法和代码就可以,系统会调用不需要单独手动调用
- 我们先看看效果图吧(下图)
- 首先这个效果苹果默认是做不出来的,查阅相关文档发现阴影的色值和透明度不能修改
- 网上有些人说可以绘制,尝试了一下根据文字外形轮廓的不同进行绘制,难度和复杂度相当高,中途就放弃了
我的实现思路也比较土,根据文档阴影的透明度系统赋值时设置了1/3,因为不能修改这个值,所以我叠放了四层UIlabel
,下面是简单的代码分享
label.textAlignment = NSTextAlignmentCenter;
label.textColor = UIColor.whiteColor;
label.font = [UIFont boldSystemFontOfSize:20];
label.numberOfLines = 0;
label.layer.shadowColor = UIColor.blackColor.CGColor;
label.layer.shadowOffset = CGSizeMake(0, 0);
label.layer.shadowRadius = 4;
label.layer.shadowOpacity = 1.0;
完美