我正在将使用此tutorial的iPhone应用程序移植到Mac应用程序中。我已经能够让文本在NSScrollView中显示,但我不能让文本滚动,我希望有人知道我错过了什么。
在iPhone应用程序中,CTView是UIScrollView的子类
CTView.h:
@interface CTView : UIScrollView <UIScrollViewDelegate> {1) AppKit中没有NSScrollViewDelegate。缺少NSScrollView的委托接口是问题所在吗?
因此,对于Mac应用程序,CTView.h如下所示:
@interface CTView : NSScrollView 在CTView.m中我有
[self setHasHorizontalScroller:YES];
[self setAcceptsTouchEvents:YES];另外,在CTView.m中,我创建了一个帧的NSMutableArray,如下所示
self.frames = [NSMutableArray array];并用帧填充数组。我还设置了文档视图的框架,以便能够滚动浏览完整的较大图像,如下所示:
[[self contentView] setFrame:[self bounds]];
[self.documentView setFrame: NSMakeRect(0, 0, totalPages * self.bounds.size.width, textFrame.size.height)];第一个框架在CTView中可见,但当我移动水平滚动条时,第二个框架在CTView中不显示。
我使用的是Xcode4.3.3和MacOSX10.7.4。
有没有人知道我需要做些什么才能让NSScrollView滚动浏览这些框架?
发布于 2012-07-07 08:55:49
终于想明白了。呼!
1) NSScrollView需要为其documentView提供一个视图,其中documentView是所滚动的内容。因此,在nib中,我创建了一个包含documentView视图的NSScrollView,并将documentView设置为该视图,如CTView.m中的代码所示
NSArray *viewArray = [self subviews];
NSArray *docViewArray = [[viewArray objectAtIndex:0] subviews];
NSView *docView = [docViewArray objectAtIndex:0];
[self setDocumentView:docView];2)然后,我将通常添加到UIScrollView中的帧数组添加到NSScrollView的documentView中。框架数组由多个内容元素组成。
while (textPos < [attString length]) {
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), innerPath, NULL);
CFRange frameRange = CTFrameGetVisibleStringRange(frame);
CTColumnView* content = [[[CTColumnView alloc] initWithFrame: NSMakeRect(0, 0, self.contentSize.width, self.contentSize.height)] autorelease];
[docView addSubview: content]; // <<-- Here is where the frames are added to the documentView
textPos += frameRange.length;
}这就起到了作用。
https://stackoverflow.com/questions/11318562
复制相似问题