2011-03-21 77 views
0

这个问题是有关Get scroll bar position of an NSScroller on the fly获取上滚动

列表元素边界或框架,但现在我想知道如何在滚动获取列表元素(绿色矩形)的当前位置。 enter image description here

[self bounds][self frame][[self enclosingScrollView] ...]不会为这种事情工作或我使用它错了。

编辑

里面的[[NSScrollView enclosingScrollView] contentView]]框架,我们看到的NSBox的名单。 当我的NSBox三角这是列表元素,NSBox的实例存储在-activeTicketRow点击,我一直以为我可以再进去NSScrollView框架NSBox坐标时[[NSScrollView enclosingScrollView] contentView]]范围的更改,但看完“查看编程指南”后,我可能不会。

我在NSScrollView

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

加入观察员和-updateConvMenu我得到的[[self enclosingScrollView] contentView]坐标,所以这是很好的。

问题

不,我想用来存储NSBox(其中三角是点击)从[[self enclosingScrollView] contentView]-activeTicketRow这样我就可以再得到它的框架坐标-updateConvMenu[[self enclosingScrollView] contentView]范围的更改。

我觉得现在这个问题更具可读性。

回答

0

当滚动列表,我计算是否所选项目的列表中的水平中心的特定范围后不走,其重叠于[NSScrollView frame]

0

视图处于层次结构中。问问自己“相对于视图/窗口/屏幕的位置?”然后使用NSView的各种-convertRect:...或NSWindow的-convert ...方法。

+0

它应该是相对于窗口。 当我使用'[self convertRect:[[[NSApp delegate] activeTicketRow] bounds] fromView:nil]'activeTabTicket'是列表元素,我得到了很好的坐标,但他们指向项目的原始位置,他们不当我滚动列表时改变。 – xyz 2011-03-21 16:24:05

+0

什么是自我?你确定你想要窗口坐标吗?如果您尝试使用弹出式窗口,则几乎肯定需要屏幕坐标。您的-activeTicketRow的边界在哪个坐标空间中生存?你确定这一切都是你认为的吗?我不打赌。 – 2011-03-21 16:33:40

+0

我真的认为你需要研究视图几何http://developer.apple。com/library/mac /#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23 // apple_ref/doc/uid/TP40002978-CH10-SW1 and view hierarchy http://developer.apple.com/library/ mac /#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23 // apple_ref/doc/uid/TP40002978-CH10-SW1 ... – 2011-03-21 16:34:53

0

您可以通过设置- (void)setPostsBoundsChangedNotifications:YES观察NSClipView s(滚动视图的contentView)范围来获取内容视图的位置。然后,只要在发生通知时将坐标转换为您想要的视图。

对于翻译看看该文档乔希也已经发布View Programming Guide