IKImageView и полосы прокрутки
Я пытаюсь использовать IKImageViewDemo, предоставленный Apple ( http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html), и я пытаюсь добавить полосы прокрутки к нему. Я пробовал две вещи:
1) встраивание IKImageView в ScrollView. Это имело всевозможные странные эффекты, например, изображение больше не было расположено там, где оно должно было быть, и полосы прокрутки, казалось, были в фиксированном месте, независимо от того, насколько велико окно (так что я мог уменьшить окно и потерять полосы прокрутки, хотя scrollview был установлен для изменения размера с окном)
2) Я добавил [_imageView setHasHor horizontalScrollers: YES] (и вертикальный) в код в методе openImageURL. Похоже, это ничего не сделало.
Я что-то упускаю из виду?
Дополнительно: почему
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);
печатать б 1 скроллеры 0?
1 ответ
В IKImageViewDemo вы могли наверстать упущенное и то, что изображение было увеличено для windowDidResize:
метод ([_imageView zoomImageToFit: self]
).
Встраивание IKImageView в NSScrollView - правильная вещь. Чтобы полосы прокрутки следовали за окном при изменении его размера, вам необходимо настроить пружины и распорки (== маску авторазмера) в Интерфейсном Разработчике.
Приложение: Как вы заметили, в 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 с полосами прокрутки и вышеупомянутым обходным решением.