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
的行,它将起作用,但是显然那不是一种选择。怎么了?