2016-07-03 4 views
0

Я пытаюсь сделать CATextLayerNSBackGroundColorAttributeName атрибутом в атрибутной строке?CATextLayer NSBackGroundColorAttributeName есть способ заставить его работать?

let mutableAttributed = NSMutableAttributedString(string: text , attributes: [ 
      NSForegroundColorAttributeName : UIColor.redColor(), 
      NSBackgroundColorAttributeName : UIColor.whiteColor(), 
      NSFontAttributeName :UIFont.systemFontOfSize(12) 
      ]) 
    let textLayer = CATextLayer() 
    textLayer.needsDisplayOnBoundsChange = true 
    textLayer.string = mutableAttributed 
    textLayer.bounds.size = CGSizeMake(200,200) 

Но это просто не работает, чтение стека я нашел разумный answer, но довольно старый, и это не кажется, вполне ясно, если от iOS6 она должна поддерживать его или нет.

ответ

1

Ответ, на который вы указали, является правильным. CATextLayer очень примитивен и не поддерживает эту функцию. К счастью, нет необходимости использовать основной текст; теперь вы можете использовать TextKit и просто нарисовать строку напрямую (и вообще не использовать CATextLayer).

class MyTextLayer : CALayer { 
    @NSCopying var string : NSAttributedString? 

    override func drawInContext(ctx: CGContext) { 
     super.drawInContext(ctx) 
     UIGraphicsPushContext(ctx) 
     string?.drawWithRect(self.bounds, 
      options: .UsesLineFragmentOrigin, context: nil) 
     UIGraphicsPopContext() 
    } 
} 
+0

Извините, я просто пытался собрать код из оригинала, конечно, в оригинале, я устанавливал свойство right. Я обновляю ответ. Спасибо – Andrea

+0

Добавлен код, показывающий, как создать CALayer, который рисует собственный атрибутный текст. – matt

+0

На самом деле я не могу использовать обычный TextKit View, потому что добавляю слои над композицией видео. Насколько я помню, Apple явно заявляет, что не использует слой UIView. Теперь я собираюсь использовать ваш код или просто перечислять атрибуты строки, чтобы установить только фон слоя. Большое спасибо – Andrea