Pregunta

Estoy tratando de utilizar el IKImageViewDemo proporcionado por Apple ( http : //developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html ) y estoy tratando de añadir barras de desplazamiento a la misma. He intentado dos cosas:

1) la incorporación de la IKImageView en un ScrollView. Esto tuvo todo tipo de efectos extraños, como la imagen ya no se encuentra donde debería haber sido, y las barras de desplazamiento parecía estar en un lugar fijo, no importa cuán grande era la ventana (por lo que podría reducir el tamaño de la ventana y bajar de las barras de desplazamiento , a pesar de que la ScrollView se estableció para cambiar el tamaño de la ventana)

2) añadí [setHasHorizontalScrollers _imageView: SI] (y vertical) en el código en el método openImageURL. Esto parece haber hecho nada.

Me estoy perdiendo algo obvio?

Además: ¿Por qué

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

dame:

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

Además adicionalmente:

¿por qué manera equivalente:

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

impresión B 1 0 Scrollers?

¿Fue útil?

Solución

Una cosa que puede haber sido que ponerse al día en IKImageViewDemo era que la imagen fue ampliada para encajar en el método windowDidResize: ([_imageView zoomImageToFit: self]).

Inserción de la IKImageView en un NSScrollView es lo que hay que hacer. Con el fin de obtener las barras de desplazamiento para seguir la ventana a medida que cambia su tamaño, es necesario ajustar los resortes y puntales (== máscara de tamaño automático) en el Interface Builder.

Adición: Como se ha notado, hay un error en Mac OS X 10.6 que hace que esto no funcione correctamente. Puede solucionar el problema creando una subclase de la NSScrollView de la siguiente manera:

@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

Trate de hacer esto:

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

Es una versión de IKImageViewDemo con barras de desplazamiento y la solución anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top