THLabel
THLabel 是 UILabel 的子类,它还允许阴影模糊、内部阴影、描边文本和填充渐变。
要求
- iOS 4.0 或更高版本(尽管 iOS 7.0 以下未经过测试)
- ARC 启用
安装
在您的应用程序中使用 THLabel 的一种简单方法是使用 CocoaPods。
- 在项目的 Podfile 文件中添加以下行:
pod 'THLabel', '~> 1.4.0'
- 在 Podfile 文件夹目录下运行命令
pod install
手动安装
- 将
CoreText.framework
添加到您的 Link Binary with Libraries 列表中。 - 将这些文件拖入您的项目中:
THLabel.h
,THLabel.m
IBDesignable / IBInspectable
存在一个ibdesignable
分支,如果您对这个功能感兴趣。它已经被从master
分支移除,因为IBDesignable和IBInspectable在使用use_frameworks!
(在Podfile中)时会导致CocoaPods出现问题。
使用方法
您可以程序化创建THLabels,也可以通过将普通的UILabel拖入您的视图中,并在Interface Builder中将它的Custom Class设置为THLabel来创建它们。在Xcode 6中,您可以在Interface Builder中设置大多数属性,它会立即预览您的更改。
属性
间距
@property CGFloat letterSpacing;
@property CGFloat lineSpacing;
您可以通过改变letterSpacing
属性来修改文本的字母间距(也称为kerning)。默认值为0.0
。正值会分离字符,而负值会使其更接近。
通过改变lineSpacing
属性来修改文本的行间距(也称为leading)。默认值为0.0
。只有正值才会有效。
阴影模糊
@property CGFloat shadowBlur;
除了UILabel的shadowColor
和shadowOffset
外,您还可以设置阴影模糊以柔化阴影。
内部阴影
@property CGFloat innerShadowBlur;
@property CGSize innerShadowOffset;
@property UIColor *innerShadowColor;
内部阴影具有与UILabel的阴影类似的属性,再次补充了阴影模糊。如果内部阴影和描边重叠,则将在描边下方显示。
描边文字
@property CGFloat strokeSize;
@property UIColor *strokeColor;
@property THLabelStrokePosition strokePosition;
您可以通过设置strokePosition
属性来设置外边、居中或内部描边。默认值为THLabelStrokePositionOutside
。其他选项是THLabelStrokePositionCenter
和THLabelStrokePositionInside
。
填充渐变
@property UIColor *gradientStartColor;
@property UIColor *gradientEndColor;
@property NSArray *gradientColors;
@property CGPoint gradientStartPoint;
@property CGPoint gradientEndPoint;
渐变可以由多种颜色组成,这些颜色必须保存为保存在gradientColors
数组中的UIColor对象。为了方便起见,gradientStartColor
和gradientEndColor
将相应地填充数组。
渐变的起始点和结束点在0到1的范围内,其中(0, 0)是文本的左上角,(1, 1)是右下角。gradientStartPoint
的默认值为(0.5, 0.2),gradientEndPoint
的默认值为(0.5, 0.8)。
淡入淡出截断
@property THLabelFadeTruncatingMode fadeTruncatingMode;
您可以通过设置fadeTruncatingMode
属性来淡入/淡出标签。默认值为THLabelFadeTruncatingModeNone
。选项是THLabelFadeTruncatingModeTail
、THLabelFadeTruncatingModeHead
和THLabelFadeTruncatingModeHeadAndTail
。
文本嵌入/填充
@property UIEdgeInsets textInsets;
@property BOOL automaticallyAdjustTextInsets;
描边和阴影效果不能绘制在标签视图的边界之外。您可能需要设置文本嵌入来稍微远离边缘,以便效果不会被剪裁。如果将automaticallyAdjustTextInsets
设置为YES
,则会自动执行此操作,这也是默认值。
备注
THLabel(与UILabel不同)尊重(vertical alignment)的contentMode
属性,当涉及到水平对齐时,textAlignment
仍然有更高的优先级。
然而,THLabel不尊重numberOfLines
属性,因为Core Text不支持它。如果您想有多个行,可以将lineBreakMode
设置为NSLineBreakByWordWrapping
。
THLabel的绘制速度比UILabel慢,所以请注意这一点。
致谢
原始源码和灵感来自
- FXLabel by Nick Lockwood,https://github.com/nicklockwood/FXLabel
- KSLabel by Kai Schweiger,https://github.com/vigouscoding/KSLabel
- GTMFadeTruncatingLabel by Google,https://github.com/google/google-toolbox-for-mac/tree/master/iPhone
非常感谢Jason Miller展示他的核心文本实现示例代码!这激励我深入研究并从iOS 7中远离使用NSAttributedString进行绘制,这导致了许多问题。
许可
在zlib许可下分发。有关更多信息,请参阅LICENSE文件。
联系方式
Tobias Hagemann