J'ai fait un dessin en utilisant CALayer basé sur le cadre de ma sous-classe de UIView, j'ai besoin de mettre à jour les lignes quand le périphérique tourne mais dans traitCollectionDidChange, le cadre conserve la valeur avant la rotation. Y at-il un moyen d'obtenir les valeurs mises à jour de l'image après la rotation?Le cadre UIView n'a pas été mis à jour pendant traitCollectionDidChange
Mes codes de dessin ressemble à ceci, appelé traitCollectionDidChange de c'est contrôleur de vue:
func setup() {
layer.sublayers?.removeAll()
let xAxisLine = UIBezierPath()
xAxisLine.move(to: CGPoint(x: 100, y: frame.height))
xAxisLine.addLine(to: CGPoint(x: bounds.width, y: frame.height))
let xAxisLayer = CAShapeLayer()
xAxisLayer.path = xAxisLine.cgPath
xAxisLayer.lineWidth = 2
xAxisLayer.fillColor = UIColor.clear.cgColor
xAxisLayer.strokeColor = UIColor.black.cgColor
layer.addSublayer(xAxisLayer)
}
Cette partie tire l'axe X de mon graphique personnalisé, mais plus important encore, les valeurs de cadre sont celle de avant la rotation ainsi le graphique entier est déplacé et taille.
du contrôleur de vue, je l'ai appelé par:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
barView.setup()
}
S'il vous plaît mettre à jour la question avec votre implémentation 'traitCollectionDidChange'. –
Je dois admettre que je ne devrais pas utiliser mes codes de configuration pour redessiner mais actuellement mon objectif est d'obtenir les nouvelles valeurs de la trame pour redessiner –