iOS开发之字幕描边、阴影、投影扩散

今天给播放器更换了字幕展示风格,在这里简单记录一下,因为字幕和别的普通UILabel展示有点不一样,因为播放器播放视频的时候有各种颜色,所以就要求不管什么背景颜色下用户都需要清楚的看到字幕,所以首先肯定是不能直接使用单色,我刚开始使用了添加阴影,后来产品说有点不清晰,今天又改成了描边,两个效果对比个人觉得描边效果更好一点

效果

  • 阴影


  • 描边


实现

  1. 阴影
        self.layer.shadowColor = UIColor.blackColor.CGColor;
        self.layer.shadowOffset = CGSizeMake(2, 2);
        self.layer.shadowOpacity = 0.8;
        self.layer.shadowRadius = 4;
  1. 描边
- (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. 我们先看看效果图吧(下图)
  • 首先这个效果苹果默认是做不出来的,查阅相关文档发现阴影的色值和透明度不能修改
  • 网上有些人说可以绘制,尝试了一下根据文字外形轮廓的不同进行绘制,难度和复杂度相当高,中途就放弃了

    我的实现思路也比较土,根据文档阴影的透明度系统赋值时设置了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;

完美

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容