Нарисуйте круг позади определенных персонажей UILabel - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь нарисовать круг за определенными частями символов UILabel, не используя несколько меток или пересчитывать кадры.

Я знаю, что могу вставить изображение в UILabel с использованием атрибутивного текста, но хочу, чтобы кругстоять за цифрами (от 1 до 9).Я не хочу хранить изображения от 1 до 9. Я также не могу найти ни одного модуля, который бы достиг этого.

    let fullText = NSMutableAttributedString()

    let imageAttachment = NSTextAttachment()
    imageAttachment.image = UIImage(named: "\(number)_\(color == .yellow ? "yellow" : "gray")")
    let imageString = NSAttributedString(attachment: imageAttachment)
    let endString = NSAttributedString("nouveaux")

    fullString.append(imageString)
    fullString.append(endString)

    mainLabel.attributedText = fullString

enter image description here

РЕДАКТИРОВАТЬ

Я хочу нарисовать круг за каждой цифрой строки.Я хотел бы, чтобы это был общий инструмент, если это возможно, какой-то синтаксический анализатор, который возвращает приписанную строку, если это возможно, уникальный UIView, если нет.Другой вариант использования: "4 сообщения | чат 2" (4 - желтый, 2 - серый)

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я не понимаю, почему вы не просто используете служебную функцию, которая рисует цифру в круге в реальном времени.Таким образом, вы можете выбрать любой цифровой шрифт, размер круга, цвет цифры и цвет круга.Например:

func circleAroundDigit(_ num:Int, circleColor:UIColor,
                       digitColor:UIColor, diameter:CGFloat,
                       font:UIFont) -> UIImage {
    precondition((0...9).contains(num), "digit is not a digit")
    let p = NSMutableParagraphStyle()
    p.alignment = .center
    let s = NSAttributedString(string: String(num), attributes:
        [.font:font, .foregroundColor:digitColor, .paragraphStyle:p])
    let r = UIGraphicsImageRenderer(size: CGSize(width:diameter, height:diameter))
    return r.image {con in
        circleColor.setFill()
        con.cgContext.fillEllipse(in:
            CGRect(x: 0, y: 0, width: diameter, height: diameter))
        s.draw(in: CGRect(x: 0, y: diameter / 2 - font.lineHeight / 2,
                          width: diameter, height: diameter))
    }
}

Вот как это использовать:

let im = circleAroundDigit(3, circleColor: .yellow, 
    digitColor: .white, diameter: 30, font:UIFont(name: "GillSans", size: 20)!)

Вот результирующее изображение;заметьте, однако, что каждый аспект этого можно настроить, просто вызвав функцию по-разному:

enter image description here

Хорошо, теперь у вас есть изображение,Вы говорите, что уже знаете, как вставить встроенное изображение в строку атрибута и отобразить ее как часть метки, поэтому я не буду объяснять, как это сделать:

enter image description here

0 голосов
/ 19 сентября 2018

Это довольно просто, используя UIStackView, устанавливая угловой радиус слоя цветного вида…

image

результат…

image

или с двумя представлениями стека в представлении внешнего стека≥

image

результат…

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...