Вопрос

Я пытаюсь использовать IKImageViewDemo, предоставленный Apple (http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html), и я пытаюсь добавить к нему полосы прокрутки.Я пробовал две вещи:

1) встраивание IKImageView в ScrollView.Это имело множество странных эффектов, например, изображение больше не находилось там, где оно должно было быть, а полосы прокрутки, казалось, находились в фиксированном месте, независимо от того, насколько велико было окно (поэтому я мог сжать окно и потерять полосы прокрутки). , хотя размер прокрутки был настроен на изменение размера вместе с окном)

2) Я добавил [_imageView setHasHorizontalScrollers: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);

напечатать b 1 скроллеры 0 ?

Это было полезно?

Решение

Одна вещь, которая, возможно, вас зацепила в 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 с полосами прокрутки и описанным выше обходным решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top