Почему установка isOpaque в true для CATextLayer делает фон черным? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь уменьшить количество смешанных слоев, чтобы улучшить производительность. Я использую CATextLayer для отображения некоторых меток. Цвет текста устанавливается с помощью свойства foregroundColor, а цвет фона - через backgroundColor.

Проблема заключается в том, что когда я устанавливаю isOpaque в true, цвет фона слоя становится черным, независимо от того, что backgroundProperty.

Может кто-нибудь объяснить, что здесь происходит, и как мне сохранить цвет фона при настройке isOpaque в true?

Вот быстрый код игровой площадки, чтобы воспроизвести проблему:

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let label = CATextLayer()
        label.frame = CGRect(x: 150, y: 200, width: 200, height: 50)
        label.string = "My label"
        label.foregroundColor = UIColor.gray.cgColor
        label.backgroundColor = UIColor.orange.cgColor
        label.isOpaque = true

        view.layer.addSublayer(label)
        self.view = view
    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

И результат (я ожидаю, что фон textLayer будет оранжевым, но, как вы можете видеть, черным):

enter image description here

1 Ответ

0 голосов
/ 30 июня 2019

Комментарий в заголовке понятен:

/* A hint marking that the layer contents provided by -drawInContext:
 * is completely opaque. Defaults to NO. Note that this does not affect
 * the interpretation of the `contents' property directly. */

Установив isOpaque на true, вы сообщаете Core Animation, что содержимое непрозрачно и не нуждается в альфа-канале.Просто не устанавливайте это свойство на true.

...