gpt4 book ai didi

objective-c - IKImageView 和滚动条

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:24 27 4
gpt4 key购买 nike

我正在尝试使用 apple ( http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html ) 提供的 IKImageViewDemo 并尝试向其添加滚动条。我试过两件事:

1) 将 IKImageView 嵌入到 ScrollView 中。这产生了各种奇怪的效果,比如图像不再位于它应该在的位置,滚动条似乎在一个固定的位置,无论窗口有多大(所以我可以缩小窗口并丢失滚动条,即使 ScrollView 设置为随窗口调整大小)

2) 我在 openImageURL 方法的代码中添加了 [_imageView setHasHorizo​​ntalScrollers: YES](和垂直)。这似乎什么也没做。

我是否漏掉了一些明显的东西?

另外:为什么

NSLog(@"scrollbar? H %d V %d hide %d", 
_imageView.hasHorizontalScroller,
_imageView.hasVerticalScroller,
_imageView.autohidesScrollers);

_imageView.hasHorizontalScroller = YES;
_imageView.hasVerticalScroller = YES;
_imageView.autohidesScrollers = YES;

NSLog(@"scrollbar? H %d V %d hide %d",
_imageView.hasHorizontalScroller,
_imageView.hasVerticalScroller,
_imageView.autohidesScrollers);

给我:

scrollbar? H 0 V 0 hide 0
scrollbar? H 0 V 0 hide 0

?

另外另外:

等价地为什么:

 BOOL b = _imageView.autohidesScrollers = YES;
NSLog (@"b %d scrollers %d", b, _imageView.autohidesScrollers);

打印 b 1 滚动条 0 ?

最佳答案

在 IKImageViewDemo 中可能一直困扰您的一件事是图像被缩放以适应 windowDidResize: 方法 ([_imageView zoomImageToFit: self])。

在 NSScrollView 中嵌入 IKImageView 是正确的做法。为了让滚动条在您调整窗口大小时跟随窗口,您需要在 Interface Builder 中调整 Spring 和支柱(== 自动调整掩码)。

附录:正如您所注意到的,Mac OS X 10.6 中存在一个错误,导致此功能无法正常工作。您可以通过如下子类化 NSScrollView 来解决该问题:

@interface IKImageClipView : NSClipView
- (NSRect)docRect;
@end

@implementation ScrollViewWorkaround

- (void)reflectScrolledClipView:(NSClipView *)cView;
{
NSView *_imageView = [self documentView];
[super reflectScrolledClipView:cView];
if ([_imageView isKindOfClass:[IKImageView class]] &&
[[self contentView] isKindOfClass:[IKImageClipView class]] &&
[[self contentView] respondsToSelector:@selector(docRect)]) {
NSSize docSize = [(IKImageClipView *)[self contentView] docRect].size;
NSSize scrollViewSize = [self contentSize];
// NSLog(@"doc %@ scrollView %@", NSStringFromSize(docSize), NSStringFromSize(scrollViewSize));
if (docSize.height > scrollViewSize.height || docSize.width > scrollViewSize.width)
((IKImageView *)_imageView).autohidesScrollers = NO;
else
((IKImageView *)_imageView).autohidesScrollers = YES;
}
}

@end

试试这个:

http://dl.dropbox.com/u/1583683/IKImageViewDemo.zip

这是一个带有滚动条和上述解决方法的 IKImageViewDemo 版本。

关于objective-c - IKImageView 和滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com