2016-12-06 1 views
0

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() 
} 
+0

S'il vous plaît mettre à jour la question avec votre implémentation 'traitCollectionDidChange'. –

+0

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 –

Répondre

2

Vous ne mettez pas à jour ajoutez votre dessin vous toujours une nouvelle couche à votre point de vue lorsque des changements d'orientation.

Vous devez créer le calque dans viewDidLoad et enregistrer une référence à celui-ci. Dans traitCollectionDidChange, vous affectez juste un nouveau chemin à la couche.

+0

mais sans la nouvelle hauteur et largeur de la vue comment calculer le chemin à dessiner? –

+1

Au lieu de 'traitCollectionDidChange' vous pouvez utiliser overwrite' layoutSubviews' ('UIView') ou' viewDidLayoutSubviews' ('UIViewController'). – clemens

0
+0

Merci ... mais je n'ai pas besoin de beaucoup de précision dans la rotation de l'appareil. Je n'ai besoin que du cadre de l'UIView après la rotation. Ce que j'autorise l'appareil à effectuer par son propre calcul –