Question

Je suis en train d'utiliser le IKImageViewDemo fourni par Apple ( http : //developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html ) et je suis en train d'ajouter des barres de défilement à elle. J'ai essayé deux choses:

1) l'incorporation du IKImageView dans un ScrollView. Cela a eu toutes sortes d'effets étranges, comme l'image ne se trouve plus où il aurait dû, et les barres de défilement semblait être dans un lieu fixe, peu importe la taille de la fenêtre était (donc je pouvais réduire la fenêtre et de perdre les barres de défilement , même si le scrollview a été fixé à redimensionner la fenêtre)

2) I ajoutée [_imageView setHasHorizontalScrollers: OUI] (et vertical) dans le code dans la méthode openImageURL. Cela semble avoir rien fait.

Suis-je manque quelque chose d'évident?

De plus: Pourquoi

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

me donner:

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

De plus en plus:

Équivalemment pourquoi est:

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

Imprimer b 1 0 changeurs?

Était-ce utile?

La solution

Une chose qui peut avoir été vous rattrapent leur retard IKImageViewDemo était que l'image a été agrandie pour tenir dans la méthode de windowDidResize: (de [_imageView zoomImageToFit: self]).

Intégration de la IKImageView dans un NSScrollView est la bonne chose à faire. Afin d'obtenir les barres de défilement pour suivre la fenêtre que vous redimensionnez, vous devez régler les ressorts et les entretoises (== masque de Autoresizing) dans Interface Builder.

Addendum: Comme vous l'avez remarqué, il y a un bug sous Mac OS X 10.6 qui cause cela ne fonctionne correctement. Vous pouvez contourner le problème en dérivant NSScrollView comme suit:

@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

Essayez ceci:

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

Il est une version de IKImageViewDemo avec des barres de défilement et la solution de contournement ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top