¿Cómo detectar cuándo se cambia el tamaño UIView en ios xcode rápido?

Estoy probando algunas cosas con CATiledLayer dentro de UIScrollView.

De alguna manera, el tamaño de UIView dentro de UIScrollView se cambia a un gran número. Necesito averiguar exactamente qué está causando este cambio de tamaño.

¿Hay alguna manera de detectar cuándo se cambia el tamaño del tamaño de UIView (ya sea frame, bounds) o contentSize de UIScrollView?

Lo intenté

override var frame: CGRect { didSet { println("frame changed"); } } 

dentro de la subclass UIView,

pero solo se llama una vez cuando se inicia la aplicación, aunque el tamaño de UIView se cambia de tamaño después.

viewWillLayoutSubviews() y viewDidLayoutSubviews() se viewDidLayoutSubviews() cada vez que cambien los límites. En el controller de vista.

Aquí hay una respuesta:

https://stackoverflow.com/a/27590915/5160929

Simplemente pegue esto fuera de un cuerpo de método:

 override var bounds: CGRect { didSet { // Do stuff here } } 

Las respuestas son correctas, aunque para mi caso las restricciones que configuré en el storyboard causaron que el tamaño de UIView cambia sin llamar a ninguna function de detección.

También puede usar KVO:

Puede configurar un KVO como este, donde view es la view que desea observar los cambios de marco:

 self.addObserver(view, forKeyPath: "center", options: NSKeyValueObservingOptions.New, context: nil) 

Y puede get los cambios con esta notificación:

 override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer) { } 

Se observeValueForKeyPath a observeValueForKeyPath que observeValueForKeyPath el marco de la vista que está observando.

Recuerde también eliminar al observador cuando su vista esté a punto de ser desasignada:

 view.removeObserver(self, forKeyPath:@"center") 

PASO 1: viewWillLayoutSubviews

Se invoca para notificar al controller de vista que su vista está a punto de diseñar sus subvenciones.

Cuando cambian los límites de una vista, la vista ajusta la position de sus subvenciones. El controller de vista puede anular este método para realizar cambios antes de que la vista exponga sus subvenciones. La implementación pnetworkingeterminada de este método no hace nada.

PASO 2: viewDidLayoutSubviews

Llamado para notificar al controller de vista que su vista acaba de presentar sus subvenciones.

Cuando los límites cambian para la vista del controller de vista, la vista ajusta las posiciones de sus subvistas y luego el sistema llama a este método. Sin embargo, este método que se llama no indica que los layouts individuales de las subvistas de la vista se hayan ajustado. Cada subvista es responsable de ajustar su propio layout.

El controller de vista puede anular este método para realizar cambios después de que la vista exponga sus subvenciones. La implementación pnetworkingeterminada de este método no hace nada.

Por encima de estos methods se llaman siempre que se modifiquen los límites de UIView