J'essaie quelques trucs avec CATiledLayer dans UIScrollView.
D'une certaine manière, la taille de UIView à l'intérieur de UIScrollView est modifiée en grand nombre. J'ai besoin de savoir exactement ce qui cause ce redimensionnement.
Existe-t-il un moyen de détecter le redimensionnement de la taille de UIView (cadre, limites) ou contentSize de UIScrollView?
J'ai essayé
override var frame: CGRect {
didSet {
println("frame changed");
}
}
à l'intérieur de la sous-classe UIView,
mais il n'est appelé qu'une seule fois lorsque l'application démarre, bien que la taille de UIView soit redimensionnée par la suite.
viewWillLayoutSubviews()
et viewDidLayoutSubviews()
seront appelés chaque fois que les limites changent. Dans le contrôleur de vue.
Il y a une réponse ici:
https://stackoverflow.com/a/27590915/5160929
Collez-le simplement en dehors du corps d'une méthode:
override var bounds: CGRect {
didSet {
// Do stuff here
}
}
Vous pouvez également utiliser KVO:
Vous pouvez définir un KVO comme ceci, où view
est le view
que vous souhaitez observer les changements de trame:
self.addObserver(view, forKeyPath: "center", options: NSKeyValueObservingOptions.New, context: nil)
Et vous pouvez obtenir les modifications avec cette notification:
override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer) {
}
observeValueForKeyPath
sera appelé chaque fois que le cadre de la vue que vous observez change.
N'oubliez pas non plus de supprimer l'observateur lorsque votre vue est sur le point d'être désallouée:
view.removeObserver(self, forKeyPath:@"center")
Les réponses sont correctes, bien que dans mon cas, les contraintes que j'ai configurées dans le storyboard ont fait changer la taille d'UIView sans rappeler aucune fonction de détection.
ÉTAPE 1: viewWillLayoutSubviews
Appelé pour informer le contrôleur de vue que sa vue est sur le point de disposer ses sous-vues
Lorsque les limites d'une vue changent, la vue ajuste la position de ses sous-vues. Votre contrôleur de vue peut remplacer cette méthode pour apporter des modifications avant que la vue ne présente ses sous-vues. L'implémentation par défaut de cette méthode ne fait rien.
ÉTAPE 2: viewDidLayoutSubviews
Appelé pour informer le contrôleur de vue que sa vue vient de présenter ses sous-vues.
Lorsque les limites changent pour la vue d'un contrôleur de vue, la vue ajuste les positions de ses sous-vues, puis le système appelle cette méthode. Cependant, cette méthode appelée n'indique pas que les dispositions individuelles des sous-vues de la vue ont été ajustées. Chaque sous-vue est chargée d'ajuster sa propre mise en page.
Votre contrôleur de vue peut remplacer cette méthode pour apporter des modifications une fois que la vue présente ses sous-vues. L'implémentation par défaut de cette méthode ne fait rien.
Au-dessus de ces méthodes sont appelées chaque fois que limites de UIView est changé