ユーザーがNSScrollView
をスクロールしていることを知る必要があるMacアプリを作成していますが、次のデリゲートメソッドを持つUIScrollView
のようなメソッドが見つかりません。
– scrollViewDidScroll:
– scrollViewWillBeginDragging:
– scrollViewDidEndDragging:willDecelerate:
– scrollViewShouldScrollToTop:
– scrollViewDidScrollToTop:
– scrollViewWillBeginDecelerating:
– scrollViewDidEndDecelerating:
App Kitに同様のデリゲートメソッドを使用できますか?前もって感謝します。
カイ。
スクロールビューのコンテンツビューの境界を監視することにより、スクロールビューの変更を監視できます。まず、変更を投稿するようにコンテンツビューを設定します。
[contentView setPostsBoundsChangedNotifications:YES];
次に、これらの通知のオブザーバーとして登録します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boundsDidChange:) name:NSViewBoundsDidChangeNotification object:contentView];
最近同じ問題が発生しました...減速コールバックをいくらかエミュレートするために、オーバーライドすることが可能です
-(void) scrollWheel:(NSEvent *)theEvent
nSScrollViewクラスのですが、イベントフェーズのイベントフェーズの代わりにtheEvent.momentumPhaseを確認してください。
@Seanリッチの答えに追加します。
contentView
は、NSClipView
とNSScrollView
の間のNSCollectionView
です。
これを機能させるには、ClipView
をpostsBoundsChangedNotifications
に設定する必要があり、を通知オブジェクトに渡す必要があります。
self.clipView.postsBoundsChangedNotifications = true
NotificationCenter.default.addObserver(self,
selector: #selector(collectionViewDidScroll(notification:)),
name: NSView.boundsDidChangeNotification,
object: self.clipView)
Swift 4:の更新
scrollView.contentView.postsBoundsChangedNotifications
また、呼び出しは次のとおりです。
NotificationCenter.default.addObserver(self,
selector: #selector(boundsChange),
name: NSView.boundsDidChangeNotification,
object: scrollView.contentView)
編集:Macのコレクションはscrollviewから継承しません。適切に更新されました
Swift 4.2 OSXの私の2セント:
..。
if let clipView = self.collectionView.superview, let sv = clipView.superview as? NSScrollView{
let contentView = sv.contentView
contentView.postsBoundsChangedNotifications = true
NotificationCenter.default.addObserver(self,
selector: #selector(collectionViewDidScroll(notification:)),
name: NSView.boundsDidChangeNotification,
object: clipView)
}
//MARK: scrollview observer:
@objc func collectionViewDidScroll(notification: Notification){
}