为什么在NSScrollView中每次滚动调用adjustScroll:方法两次?

时间:2015-03-18 21:15:22

标签: cocoa nsview appkit nsscrollview

我已覆盖adjustScroll:的documentView中的NSScrollView方法,以便研究如何使用它来约束大型滚动条。

我所看到的是,在调用普通滚动通知(我正在其他地方收听)之前,对于每个滚动“事件”,它调用adjustScroll方法两次(!)并且第一次看起来总是如此用一个大小为(1,1)的矩形来调用它 - 奇怪吗?

我的方法如下:

override func adjustScroll(newVisible: NSRect) -> NSRect {
    println("Document: adjustScroll: \(newVisible)")
    return super.adjustScroll(newVisible)
}

println的结果如下:

  

文件:adjustScroll :( 1.0,0.0, 1.0,1.0

     

文件:adjustScroll:(1.0,0.0,1436.0,855.0)

我的视图层次结构中只有一个“Document”对象,只有一个scrollView ...感到困惑。

修改

我在adjustScroll电话中打印出了堆栈。两个呼叫中的每个呼叫的相关部分如下:

(1.0,1.0)

  

[0 Grid 0x000000010007d697 _TToFC4Grid8Document12adjustScrollfS0_FVSC6CGRectS1_ + 87,

     

1 AppKit 0x00007fff84368070 - [_ NSScrollingConcurrentMainThreadSynchronizer _scrollToCononicalOrigin] + 655,

     

2 AppKit 0x00007fff84367a51 - [_ NSScrollingConcurrentMainThreadSynchronizer _synchronize:completionHandler:] + 167,

     

3 AppKit 0x00007fff84367963 __80 - [_ NSScrollingConcurrentMainThreadSynchronizer initWithSharedData:constantData:] _ block_invoke + 144,

     

4 libdispatch.dylib 0x000000010057ed43 _dispatch_client_callout + 8,

     

...

(1436.0,855.0)

  

[0 Grid 0x000000010007d697 _TToFC4Grid8Document12adjustScrollfS0_FVSC6CGRectS1_ + 87,

     

1 AppKit 0x00007fff84206f8d - [NSClipView _scrollTo:animateScroll:flashScrollerKnobs:] + 1302,

     

2 AppKit 0x00007fff84368209 - [_ NSScrollingConcurrentMainThreadSynchronizer _scrollToCononicalOrigin] + 1064,

     

3 AppKit 0x00007fff84367a51 - [_ NSScrollingConcurrentMainThreadSynchronizer _synchronize:completionHandler:] + 167,

     

4 AppKit 0x00007fff84367963 __80 - [_ NSScrollingConcurrentMainThreadSynchronizer initWithSharedData:constantData:] _ block_invoke + 144,

     

5 libdispatch.dylib 0x000000010057ed43 _dispatch_client_callout + 8,

     

...

0 个答案:

没有答案