IKImageView e barre di scorrimento
-
20-09-2019 - |
Domanda
Sto cercando di utilizzare l'IKImageViewDemo fornito da Apple ( http : //developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html ) e sto cercando di aggiungere le barre di scorrimento ad esso. Ho provato due cose:
1) incorporare l'IKImageView in uno ScrollView. Ciò ha avuto tutti i tipi di effetti strani, come l'immagine non si trovava dove avrebbe dovuto essere, e le barre di scorrimento sembrava di essere in un posto fisso, non importa quanto grande la finestra era (così ho potuto ridurre la finestra e perdere le barre di scorrimento , anche se lo ScrollView è stato impostato per ridimensionare con la finestra)
2) Ho aggiunto [setHasHorizontalScrollers _imageView: SI] (e verticale) nel codice nel metodo openImageURL. Questo sembra aver fatto nulla.
Mi sto perdendo qualcosa di ovvio?
In aggiunta: Perché
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);
darmi:
scrollbar? H 0 V 0 hide 0
scrollbar? H 0 V 0 hide 0
Inoltre in aggiunta:
In modo equivalente il motivo per cui lo fa:
BOOL b = _imageView.autohidesScrollers = YES;
NSLog (@"b %d scrollers %d", b, _imageView.autohidesScrollers);
di stampa b 1 scroller 0?
Soluzione
Una cosa che potrebbe essere stato recuperando terreno fino a IKImageViewDemo era che l'immagine è stata ingrandita per adattarsi nel metodo windowDidResize:
([_imageView zoomImageToFit: self]
).
Incorporare l'IKImageView in un NSScrollView è la cosa giusta da fare. Al fine di ottenere le barre di scorrimento per seguire la finestra come il ridimensionamento, è necessario regolare le molle e puntoni (== maschera il ridimensionamento automatico) in Interface Builder.
Addendum: Come avete notato, c'è un bug in Mac OS X 10.6 che causa questo non funzioni correttamente. È possibile aggirare il problema sottoclasse della NSScrollView come segue:
@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
Prova questo fuori:
http://dl.dropbox.com/u/1583683/IKImageViewDemo.zip
Si tratta di una versione di IKImageViewDemo con barre di scorrimento e la soluzione precedente.