Обычно, если вы напрямую конвертируете html в атрибутную строку, размер шрифта увеличивается. Вы можете попытаться преобразовать строку html в атрибутную строку и вернуться назад, чтобы увидеть разницу.
Вместо этого здесь приведено фактическое преобразование размера, которое гарантирует, что размер шрифта не изменится, применяя коэффициент 0,75 на всех шрифты
extension String {
func htmlAttributedString() -> NSAttributedString? {
guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
guard let attriStr = try? NSMutableAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil) else { return nil }
attriStr.beginEditing()
attriStr.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, attriStr.length), options: .init(rawValue: 0)) {
(value, range, stop) in
if let font = value as? UIFont {
let resizedFont = font.withSize(font.pointSize * 0.75)
attriStr.addAttribute(NSFontAttributeName,
value: resizedFont,
range: range)
}
}
attriStr.endEditing()
return attriStr
}
}
Вам не нужно использовать async/await
, чтобы делать то, что вы пытаетесь сделать. Использование setInterval
и clearInterval
даст вам желаемый эффект.
actualNumber = 0;
interval = null;
addingNumber(time: number) {
if (this.interval === null) {
this.interval = setInterval(() => this.actualNumber++, time);
}
}
stopAddingNumber() {
if (this.interval !== null) {
clearInterval(this.interval);
this.interval = null;
}
}
Если я понял вашу проблему, как насчет использования setInterval и clearInterval. Вот пример кода, я не уверен, будет ли он работать нормально.
export class NumberAdd implements OnInit {
actualNumber = 0;
countActive: boolean;
interval = null;
constructor() { }
ngOnInit() {
}
addingNumber(time: number) {
if (interval) {
clearInterval(interval);
interval = null;
}
interval = setInterval(() {
this.actualNumber += 1;
}, time);
}
stopAddingNumber() {
if (interval) {
clearInterval(interval);
}
interval = null;
}
}