objective-c cocoa macos uiscrollview nsscrollview

objective c - Retrollamadas ¿Cuándo se desplaza un NSScrollView?



objective-c cocoa (4)

Actualización para swift 4:

scrollView.contentView.postsBoundsChangedNotifications

También la llamada es: NotificationCenter.default.addObserver (self, selector: #selector (boundsChange), nombre: NSView.boundsDidChangeNotification, object: self)

Editar: la colección en mac no hereda de la colección. actualizado correctamente

Estoy creando una aplicación Mac que necesita saber cuándo el usuario está desplazándose por NSScrollView ; sin embargo, no puedo encontrar ningún método como UIScrollView , que tiene los siguientes métodos delegados:

– scrollViewDidScroll: – scrollViewWillBeginDragging: – scrollViewDidEndDragging:willDecelerate: – scrollViewShouldScrollToTop: – scrollViewDidScrollToTop: – scrollViewWillBeginDecelerating: – scrollViewDidEndDecelerating:

¿Puedo tener los métodos delegados similares para el Kit de aplicaciones? Gracias por adelantado.

Kai.


Agregando a @Sean Rich respuesta.

contentView es NSClipView entre NSScrollView y NSCollectionView .

Para que esto funcione, tanto ClipView debe configurar como postsBoundsChangedNotifications y se debe pasar en el objeto de notificación.

self.clipView.postsBoundsChangedNotifications = true NotificationCenter.default.addObserver(self, selector: #selector(collectionViewDidScroll(notification:)), name: NSView.boundsDidChangeNotification, object: self.clipView)


Puede supervisar los cambios de una vista de desplazamiento controlando los límites de su vista de contenido. Primero configure la vista de contenido para publicar sus cambios con

[contentView setPostsBoundsChangedNotifications:YES];

Luego regístrese como observador de esas notificaciones con

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boundsDidChange:) name:NSViewBoundsDidChangeNotification object:contentView];


Tuvo el mismo problema recientemente ... Para emular en cierto modo devoluciones de llamada de desaceleración, es posible anular

-(void) scrollWheel:(NSEvent *)theEvent

de la clase NSScrollView, pero luego revisa theEvent.momentumPhase en lugar de theEvent.phase para las fases del evento.