Pergunta

Estou tentando usar o ikimageViewDemo fornecido pela Apple (http://developer.apple.com/mac/library/samplecode/ikimageViewdemo/index.html) E estou tentando adicionar barras de rolagem. Eu tentei duas coisas:

1) Incorporar o ikimageView em um scrollView. Isso tinha todos os tipos de efeitos estranhos, como se a imagem não estivesse mais localizada onde deveria estar, e as barras de rolagem pareciam estar em um local fixo, não importa o tamanho da janela (para que eu pudesse encolher a janela e perder as barras de rolagem , mesmo que o scrollView tenha sido definido para redimensionar com a janela)

2) Adicionei [_ImageView SethashorizontalsCrollers: Sim] (e vertical) no código no método OpenImageUrl. Isso parece não ter feito nada.

Estou perdendo algo óbvio?

Além disso: por que

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);

Me dê:

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

?

Além disso:

Equivalentemente por que:

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

Imprimir B 1 Scrollers 0?

Foi útil?

Solução

Uma coisa que pode estar te pegando em IkimageViewDemo foi que a imagem foi ampliada para caber no windowDidResize: método ([_imageView zoomImageToFit: self]).

Incorporar o ikimageView em um nsscrollView é a coisa certa a fazer. Para fazer com que as barras de rolagem sigam a janela à medida que você a redimensiona, você precisa ajustar as molas e as suportes (== máscara automática) no construtor de interface.

Termo aditivo: Como você notou, há um bug no Mac OS X 10.6 que faz com que isso não funcione corretamente. Você pode contornar o problema subclassificando o NSSCROLLVIEW da seguinte maneira:

@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

Experimente isso:

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

É uma versão do ikimageViewDemo com barras de rolagem e a solução alternativa acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top