2016-03-06 55 views
1

我想用NSMutableAttributedString在文本上绘制CATextLayer上的文本。我尝试通过[attrString setAttributes:attributes range:range];将属性设置为类似NSMutableAttributedString的字体和fontcolor,但忽略NSMutableParagraphStyle中的所有属性。CATextLayer忽略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

我有一个类似的问题,用这个:

// 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 
     } 
    }