博客> Objective-C文字加阴影方法总结
Objective-C文字加阴影方法总结
2017-11-21 08:25 评论:0 阅读:142 lvhahaha
UILable 文字投影

http://blog.csdn.net/liu1347508335/article/details/52033958

UILabel、UITextField可以直接设置shadow属性:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(30, 30, 300, 50)]; label.text = @"UILabel文字阴影效果"; //阴影颜色 label.shadowColor = [UIColor redColor]; //阴影偏移 x,y为正表示向右下偏移 label.shadowOffset = CGSizeMake(1, 1); [self.view addSubview:label];

阴影可以设置的属性比较少,如果要进行更多的设置,就要在layer层进行设置,但要把背景色设置为透明。比如UITextView,就必须在layer进行设置,因为UITextView没有提供shadow相关的属性(吐槽一下连placeholder属性都没有。。。)

UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(30, 80, 300, 50)]; textView.backgroundColor = [UIColor clearColor]; textView.font = [UIFont systemFontOfSize:17]; [self.view addSubview:textView]; textView.text = @"UITextView文字阴影效果"; //阴影透明度 textView.layer.shadowOpacity = 1.0; //阴影宽度 textView.layer.shadowRadius = 1.0; //阴影颜色 textView.layer.shadowColor = [UIColor redColor].CGColor; //映影偏移 textView.layer.shadowOffset = CGSizeMake(1, 1);

上边的方法确实好,几个lable,几个text还行,如果你是放在多个cell 上呢。。滑动卡的你哭!!太耗性能。。

所以推荐下边这个方法

还有一种方案就是利用NSAttributedString属性字符串来设置阴影了,这种方法还可以控制range:

NSShadow *shadow = [[NSShadow alloc]init]; shadow.shadowBlurRadius = 1.0; shadow.shadowOffset = CGSizeMake(1, 1); shadow.shadowColor = [UIColor blackColor];

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:name];
[attributedString addAttribute:NSShadowAttributeName
                          value:shadow
                          range:NSMakeRange(0, attributedString.length)];

_roomName.attributedText = attributedString;

上边的最好自己写一个object 或者 extension,使用的时候加上多线程,性能会好很多!!!

// 文字阴影的处理 -- 多线程使用,页面不卡顿了
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSString *roomName  = [roomInfo.name length] > 0 ? roomInfo.name : (roomInfo.ownerInfo ? [NSString stringWithFormat:@"%@的房间", roomInfo.ownerInfo.nickname] : @"房间");

    if ([roomName length] > 6) {
        roomName = [[roomName substringToIndex:6] stringByAppendingString:@"..."];
    }
    NSMutableAttributedString *str = [EPAttributedTextWithShadow setUpShadowText:roomName color:[UIColor blackColor] start:0 length:roomName.length];
    dispatch_async(dispatch_get_main_queue(), ^{

        _roomName.attributedText = str;
    });
});

不要在lable上做操作!!!像这样 // _roomName.layer.shadowRadius = 2; // _roomName.layer.shadowColor = [[UIColor blackColor] CGColor]; // _roomName.layer.shadowOpacity = 0.8; // _roomName.layer.shadowOffset = CGSizeMake(1.5f, 2.5f);

收藏
2
sina weixin mail 回到顶部