2013-01-01 46 views
4

我想重新创建一些功能,可以在具有NSScrollView的苹果日历应用程序(osx)中看到。当您在日历应用程序中上下滚动查看视图的边界时,它不仅仅是一个空白区域,而且会从日历本身扩展网格线。我想知道如何做到这一点?我希望答案会非常简单。像绘制内容视图比需要更大,然后在滚动视图上设置一些属性来限制它认为是可滚动内容的内容。在翻阅NSScrollView文档后,我还没有找到任何线索。如果答案相对简单,请原谅我,并感谢您提供任何答案。NSScrollView,在视图边界外的弹性和绘图

回答

0

它很像NSScrollView文档所说的。使用:

-(void)setDocumentView:(NSView *)aView 

在上面设置一个NSClipView。这将保存比显示部分大的绘制内容,并将不可见的部分滚动到视图中。你还应该看看“可可制图指南”。

+1

我知道它已经有一段时间我上次张贴了这个,但是我还没有设法达到我想要的。我尽我所知地回顾了所有关于滚动视图和剪辑视图的苹果文档(+谷歌搜索了很多),我仍然没有进一步向前。你能否进一步解释你的答案,也许用一些代码来演示?设置剪辑视图的边界只会改变滚动视图内部的内容...而不是可滚动边界之外的内容。谢谢。 – lateAtNight

0

这是从别人的代码在这里采用Stackoverflow。该代码通过表格顶部绘制水平网格。我想你可以改变它来绘制垂直网格。把它放在你的NSTableView子类:

- (void)drawGridInClipRect:(NSRect)clipRect 
{ 
    NSRect boundsToDraw = clipRect; 
    CGFloat yStart = 0; 

    if (clipRect.origin.y < 0) { 

     while (yStart > NSMinY(boundsToDraw)) { 

      CGFloat yRowTop = yStart - self.rowHeight; 

      NSRect rowFrame = NSMakeRect(0, yRowTop, boundsToDraw.size.width, 1.0); 

      [[self gridColor] set]; 

      NSRectFill(rowFrame); 

      yStart -= self.rowHeight; 

     } 
    } 
} 
+1

这个答案似乎有最大的潜力,也许你可以详细说明一下? 1.什么将调用drawGridInClipRect方法? 2.它将如何知道被叫?等等... – Sam

0

设置了滚动的背景得出正确的背景...因为没有动态内容

0

可以绘制在文档外,将重复的日历效应查看与一个半私有方法:

- (void)drawBackgroundOverhangInRect:(NSRect)dirtyRect { 
    [[NSColor cyanColor] set]; 
    NSRectFill(dirtyRect); 
} 

后可用10.7