быстрое использование неразрешенного идентификатора ‘CTFramesetterCreateWithAttributedString’

#swift #core-text

#быстрый #основной текст

Вопрос:

Я хочу использовать CoreText для выполнения чего-либо, однако у меня есть некоторые вопросы по поводу функции: TFramesetterCreateWithAttributedString(). как мне следует поступить? Спасибо!

 import UIKit

class NLUICoreTextLabel: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    initparagraph()
}

func initparagraph(){
    let context = UIGraphicsGetCurrentContext()
    context?.translateBy(x: 0, y: bounds.size.height)
    context?.scaleBy(x: 1.0, y: -1.0)
    context?.textMatrix = .identity
    let path = CGMutablePath()
    let bounds = CGRect(x: 10.0, y: 10.0, width: 200.0, height: 200.0)
    path.addRect(bounds)
    let textString: CFString = "Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text " as CFString
    let attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0)
    CFAttributedStringReplaceString(attrString, CFRangeMake(0, 0), textString)
    let rgbColor = CGColorSpaceCreateDeviceRGB()
    let components: Array<CGFloat> = [1.0, 0.0, 0.0, 0.8]
    let red = CGColor.init(colorSpace: rgbColor, components: components)
    CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 12), NSAttributedString.Key.foregroundColor as CFString, red)
    //There have a trouble🔽        
    let frameSetter = CTFramesetterCreateWithAttributedString(attrString)
}


required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    }
}
 

Сообщение об ошибке: использование неразрешенного идентификатора
‘CTFramesetterCreateWithAttributedString’CTFramesetterCreateWithAttributedString’

Изображение — это мой код
введите описание изображения здесь

Ответ №1:

Вам нужно добавить

 import CoreText
 

Редактировать:

Приведенный ниже код компилируется нормально для меня:

 import Foundation
import UIKit

class NLUICoreTextLabel: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        initparagraph()
    }

    func initparagraph(){
        let context = UIGraphicsGetCurrentContext()
        context?.translateBy(x: 0, y: self.bounds.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.textMatrix = .identity
        let path = CGMutablePath()
        let bounds = CGRect(x: 10.0, y: 10.0, width: 200.0, height: 200.0)
        path.addRect(bounds)
        let textString: CFString = "Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text Core Text " as CFString
        let attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0)!
        CFAttributedStringReplaceString(attrString, CFRangeMake(0, 0), textString)
        let rgbColor = CGColorSpaceCreateDeviceRGB()
        let components: Array<CGFloat> = [1.0, 0.0, 0.0, 0.8]
        let red = CGColor.init(colorSpace: rgbColor, components: components)
        CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 12), NSAttributedString.Key.foregroundColor as CFString, red)
        //There have a trouble🔽
        let frameSetter = CTFramesetterCreateWithAttributedString(attrString)
    }


    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
 

Комментарии:

1. Спасибо, однако, это бесполезно, и я получу сообщение, подобное этому: File 'NLUICoreTextLabel.swift' is part of module 'CoreText'; ignoring import

2. Извините, это не работает. Моя информация о Xcode имеет версию 10.2 (10E125), и я использую swift 5.0

3. Конечно, позвольте мне проверить с помощью swift 5

4. компиляция также хороша с 10.2. 🙂

5. Рад помочь … 🙂