У меня есть контроллер View, содержащий 2 View, один из которых содержит кнопку.Оба вида имеют ограничения для пропорциональной высоты, соотношения сторон, выравнивания их центра X (с множителем) и нижнего пространства (с множителем) для суперпредставления.они оба начинаются с альфа = 0, и я постепенно увеличиваю их с помощью:
override func viewDidAppear(_ animated: Bool) {
UIView.animate(withDuration: 0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
self.infoContainer.alpha = 1.0
self.infoContainer.frame.origin.y -= UIScreen.main.bounds.height * 0.25
self.ordersContainer.alpha = 1.0
self.ordersContainer.frame.origin.y -= UIScreen.main.bounds.height * 0.25
}, completion: nil)
}
, теперь это работает без проблем, но теперь мне нужно изменить размер текста упомянутой кнопки в зависимости от разрешения экрана.Итак, я создал класс:
class ScaledButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
var att = titleLabel?.attributedText?.attributes(at: 0, effectiveRange: nil)
let font = att?[NSAttributedStringKey.font] as? UIFont
let size = font?.pointSize
att?[NSAttributedStringKey.font] = UIFont(name: (font?.fontName)!, size: size! * ScaledLabel.scaleFactor)
if(titleLabel?.text == nil) {return}
setAttributedTitle(NSAttributedString(string: (titleLabel?.text)!, attributes: att), for: .normal)
}
}
Статический коэффициент ScaledLabel.scaleFactor
рассчитан в другом месте.Теперь, когда я установил этот класс для кнопки во втором представлении, вместо того, чтобы начинать с позиции, в которой они находятся в раскадровке, и заканчивать так, как должен, они начинают правильно (я считаю), перемещаются в правильное положение мгновенно, затемсразу к позиции дальше вниз, а затем с анимацией в позицию tsart .... Если я удаляю строку с setAttributedTitle
из моего класса, это работает, но, очевидно, это не вариант.Что здесь не так?