mac中NSScrollView滑動監測

ro_bber發表於2017-09-10

不同於iOS中的UIScrollView,mac中的NSScrollView並沒有一堆靠譜好用的delegate來幫助我們方便的監控ScrollView的狀態。

iOS中我們可以通過UIScrollView的contentOffset屬性來獲知滑動的位置,而在mac中我們是通過NSScrollView的contentView(NSClipView的例項)的documentVisibleRect.origin來獲知滑動的相對位置。

在iOS中我們可以通過UISCrollView的delegate方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView;來在滑動的過程中做一些我們愛做的事兒呢。

那麼在mac中NSScrollView我們有沒有同樣的東西來做我們愛做的事兒呢?
當然是有的,只是跟iOS中有些許的區別,NSScrollView是通過通知來實現的,直接上程式碼:

//找個合適的地兒,註冊通知
NSNotificationCenter *center = [NSNotificationCenter defaultCenter] ;
    [center addObserver: self
               selector: @selector(boundsDidChangeNotification:)
                   name: NSViewBoundsDidChangeNotification
                 object: [self.scrollView contentView]];

需要注意的是 ,在上面通知註冊之前,你需要加上這麼一句:

[[self.scrollView contentView] setPostsBoundsChangedNotifications: YES];

然後在NSScrollView滑動的時候,你就能在你實現下面這個方法的地方,做你想做的愛做的事兒了:

- (void) boundsDidChangeNotification: (NSNotification *) notification
{
    // 在這裡進行處理
    NSClipView *changedContentView=[notification object];
    
    // get the origin of the NSClipView of the scroll view that
    // we`re watching
    
    NSPoint changedBoundsOrigin = [changedContentView documentVisibleRect].origin;
    
    
}

以上,歡迎典藏。

喜歡我的可以關注收藏我的個人部落格:RobberJJ


相關文章