Frage

Ich versuche, die IKImageViewDemo von Apple zu verwenden, sofern ( http : //developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html ) und ich versuche Scroll es hinzuzufügen. Ich habe zwei Dinge versucht:

1) die IKImageView in einem Scrollview integrieren. Dies hatte alle möglichen seltsamen Effekte, wie das Bild wurde nicht mehr entfernt, wo es sein sollte, und die Bildlaufleisten schien in einem festen Ort zu sein, egal wie groß das Fenster war (also ich das Fenster schrumpfen könnte und die Bildlaufleisten verlieren , obwohl die Scrollview, um die Größe des Fenster wurde eingestellt)

2) I habe [_imageView setHasHorizontalScrollers: Ja] (und vertikal) in den Code in der openImageURL Methode. Dies scheint nichts getan zu haben.

Bin ich etwas fehlt offensichtlich?

Außerdem: Warum funktioniert

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

Geben Sie mir:

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

Darüber hinaus zusätzlich:

In äquivalenten warum tut:

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

Drucken b 1 scrollers 0?

War es hilfreich?

Lösung

Eine Sache, die Sie fangen in IKImageViewDemo blockiert wurde war, dass das Bild vergrößert wurde in der windowDidResize: Methode ([_imageView zoomImageToFit: self]) zu passen.

Die Einbettung der IKImageView in einem NSScrollView ist das Richtige zu tun. Um die Bildlaufleisten zu erhalten, das Fenster zu folgen, wie Sie die Größe ändern, müssen Sie die Federn und Streben (== die automatische Maske) im Interface Builder anzupassen.

Nachtrag: Wie Sie bemerkt haben, gibt es einen Fehler in Mac OS X 10.6, die dies nicht richtig an der Arbeit verursacht. Sie können Subklassen die NSScrollView das Problem umgehen, wie folgt:

@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

Probieren Sie dies aus:

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

Es ist eine Version von IKImageViewDemo mit Bildlaufleisten und der obigen Abhilfe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top