CATextLayer忽略了NSMutableParagraphStyle

时间:2016-03-06 04:53:59

标签: catextlayer

我想使用NSMutableAttributedStringCATextLayer上用文字绘制文字。我尝试通过NSMutableAttributedString将属性设置为[attrString setAttributes:attributes range:range];的类似字体和fontcolor,但忽略NSMutableParagraphStyle中的所有属性。

let str = "I want to use NSMutableAttributedString to draw the text on the CATextLayer with the text. I try set attributes to the like font and fontcolor of the NSMutableAttributedString through the [attrString setAttributes:attributes range:range]; but all attributes in the NSMutableParagraphStyle are ignored."
    let att = NSMutableAttributedString(string: str)
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 12
    att.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, str.characters.count))
let contentLayer = initTextLayer("", andFontSize: 11)
    contentLayer.string = att
    contentLayer.frame = CGRect(x: 30 * AUTOSIZESCALEX, y: CGRectGetMaxY(titleLayer.frame) + 15 * AUTOSIZESCALEY, width: SCREEN_WIDTH - 60 * AUTOSIZESCALEX, height: 200 * AUTOSIZESCALEY)
    self.contentView.layer.addSublayer(contentLayer)

func initTextLayer(title: String, andFontSize size: CGFloat) -> CATextLayer{
    let textLayer = CATextLayer()
    textLayer.foregroundColor = UIColor(hexString: "333333").CGColor
    textLayer.string = title
    textLayer.alignmentMode = kCAAlignmentLeft
    textLayer.contentsScale = UIScreen.mainScreen().scale
    textLayer.shouldRasterize = false
    textLayer.wrapped = true
    textLayer.fontSize = size  * AUTOSIZESCALEY
    return textLayer
}

有什么我做错了吗?

1 个答案:

答案 0 :(得分:1)

我有类似的问题,并使用了这个:

    // Set text alignment. Apparently CATextLayer doesn't use value in NSAttributedString.
    if let style = text.attribute(NSParagraphStyleAttributeName, atIndex: 0, effectiveRange: nil) as? NSParagraphStyle {
        switch style.alignment {
        case .Center:
            textLayer.alignmentMode = kCAAlignmentCenter
        case .Left:
            textLayer.alignmentMode = kCAAlignmentLeft
        case .Right:
            textLayer.alignmentMode = kCAAlignmentRight
        default:
            break
        }
    }