IKImageView y barras de desplazamiento
-
20-09-2019 - |
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?
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.