代码之家  ›  专栏  ›  技术社区  ›  Dimitris

iPhone UILabel文本软阴影

  •  58
  • Dimitris  · 技术社区  · 16 年前

    我知道iPhone上的UILabel开箱即用不支持软阴影。那么,实施我自己的方案的最佳方式是什么呢?

    编辑:

    显然,我将子类化 UILabel 并在-drawRect中绘制: 我的问题是,我如何获得标签的内容作为图形,并围绕它们绘制,模糊它们等。。。

    编辑2:

    https://github.com/doukasd/iOS-Components/tree/master/Views

    14 回复  |  直到 10 年前
        1
  •  191
  •   Chase Roberts    5 年前

    label.layer.shadowColor = [label.textColor CGColor];
    label.layer.shadowOffset = CGSizeMake(0.0, 0.0);
    

    #import <QuartzCore/QuartzCore.h> 并使用一些参数:

    label.layer.shadowRadius = 3.0;
    label.layer.shadowOpacity = 0.5;
    

    并且,如果发现阴影被标签边界剪裁:

    label.layer.masksToBounds = NO;
    

    label.layer.shouldRasterize = YES;
    
        2
  •  38
  •   Sunki Min    14 年前

    我建议您使用UILabel的shadowColor和shadowOffset属性:

    UILabel* label = [[UILabel alloc] init];
    label.shadowColor = [UIColor whiteColor];
    label.shadowOffset = CGSizeMake(0,1);
    
        4
  •  17
  •   Stefan    13 年前

    除了IIDan的回答之外: 出于某些目的,有必要设置

    label.layer.shouldRasterize = YES
    

    我认为这是由于用于渲染阴影的混合模式。例如,我有一个黑暗的背景和白色的文字,并希望“突出”的文字使用黑色阴影辉光。直到我设置了这个属性,它才开始工作。

        5
  •  7
  •   Yang Meyer    16 年前

    将(软)阴影应用于视图的 ,例如:

    UILabel *label = [[UIabel alloc] init];
    label.layer.shadowColor = [[UIColor whiteColor] CGColor];
    label.layer.shadowOpacity = 1.0;
    
        6
  •  6
  •   Sebastian Hojas    11 年前

    要使事情保持最新:在Swift中创建阴影非常简单:

    import QuartzCore
    

    并将阴影属性设置为标签

    titleLabel.shadowColor = UIColor.blackColor()
    titleLabel.shadowOffset = CGSizeMake(0.0, 0.0)
    titleLabel.layer.shadowRadius = 5.0
    titleLabel.layer.shadowOpacity = 0.8
    titleLabel.layer.masksToBounds = false
    titleLabel.layer.shouldRasterize = true
    
        7
  •  5
  •   Mo Abdul-Hameed Martheli    9 年前
    _nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    _nameLabel.font = [UIFont boldSystemFontOfSize:19.0f];
    _nameLabel.textColor = [UIColor whiteColor];
    _nameLabel.backgroundColor = [UIColor clearColor];
    _nameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.2];
    _nameLabel.shadowOffset = CGSizeMake(0, 1);
    

    我认为应该使用[uicolorWithWhite:0 alpha:0.2]来设置alpha值。

        8
  •  4
  •   Sean    12 年前

    我尝试了几乎所有这些技术(FXLabel除外),但都无法在iOS 7上使用。我最终找到了对我来说非常合适的标签。我在Interface Builder中使用了THLabel,并设置了用户定义的运行时属性,以便非程序员可以轻松地控制外观。

    https://github.com/MuscleRumble/THLabel

        9
  •  4
  •   Nagarjun JeeVan TiWari    11 年前

    这好像是个骗局,

    UILabel *customLabel = [[UILabel alloc] init];
    
    UIColor *color = [UIColor blueColor];
    customLabel.layer.shadowColor = [color CGColor];
    customLabel.layer.shadowRadius = 5.0f;
    customLabel.layer.shadowOpacity = 1;
    customLabel.layer.shadowOffset = CGSizeZero;
    customLabel.layer.masksToBounds = NO;
    
        11
  •  3
  •   Brian    9 年前

    在里面 Swift 3 ,您可以创建一个扩展:

    import UIKit
    
    extension UILabel {
        func shadow() {
            self.layer.shadowColor = self.textColor.cgColor
            self.layer.shadowOffset = CGSize.zero
            self.layer.shadowRadius = 3.0
            self.layer.shadowOpacity = 0.5
            self.layer.masksToBounds = false
            self.layer.shouldRasterize = true
        }
    }
    

    并通过以下方式使用:

    label.shadow()
    
        12
  •  3
  •   Reinhard Männer    9 年前

    子类UILabel,如drawRect:中所述,do [self drawTextInRect:rect];

    CGContextSetShadowWithColor()
    

    在文档中查找该函数以了解如何使用它。

        13
  •  1
  •   Sticktron    14 年前

    从iOS 5开始,Apple提供了一种专用api方法来创建带有软阴影的标签。 标签的速度非常快:我在一系列透明视图中同时使用了几十个标签,并且滚动动画的速度没有减慢。

    $SBBulletinBlurredShadowLabel = NSClassFromString("SBBulletinBlurredShadowLabel");
    
    CGRect frame = CGRectZero;
    
    SBBulletinBlurredShadowLabel *label = [[[$SBBulletinBlurredShadowLabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor whiteColor];
    label.font = [UIFont boldSystemFontOfSize:12];
    label.text = @"I am a label with a soft shadow!";
    [label sizeToFit];
    
        14
  •  0
  •   luizv    6 年前

    而不可能直接设置模糊半径 UILabel

    刚刚设定:

    //Required properties
    customLabel.layer.shadowRadius = 5.0 //set shadow radius to your desired value.
    customLabel.layer.shadowOpacity = 1.0 //Choose an opacity. Make sure it's visible (default is 0.0)
    
    //Other options
    customLabel.layer.shadowOffset = CGSize(width: 10, height: 10)
    customLabel.layer.shadowColor = UIColor.black.cgColor
    customLabel.layer.masksToBounds = false
    

    行不通 如果还设置了UILabel Shadow Color .layer.shadowRadius

    所以如果设置 label.layer.shadowRadius 没有工作,请验证 为此 UILabel default . 然后,如果你想要黑色以外的阴影颜色,请将此颜色也设置为黑色 .layer 财产。

    enter image description here

        15
  •  -3
  •   NSResponder    16 年前