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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top