سؤال

أحاول استخدام IKImageViewDemo المقدمة من قبل شركة آبل (http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html) و أنا أحاول إضافة أشرطة التمرير إلى ذلك.لقد حاولت أمرين:

1) تضمين IKImageView في ScrollView.كان هذا كل أنواع غريبة من آثار مثل الصورة لم يعد موجودا حيث كان ينبغي أن يكون ، التمرير بدا أن تكون في مكان ثابت ، بغض النظر عن كيفية كبيرة نافذة (لذا أنا يمكن أن يتقلص النافذة تفقد التمرير ، على الرغم من scrollview كان من المقرر أن تغيير حجم النافذة)

2) لقد تم إضافة [_imageView setHasHorizontalScrollers:نعم] (العمودي) إلى رمز في openImageURL الأسلوب.ويبدو أن يفعل شيئا.

أنا في عداد المفقودين شيء واضح ؟

بالإضافة إلى ذلك:لماذا

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

أعطني:

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

?

بالإضافة إلى ذلك بالإضافة إلى ذلك:

مكافئ لماذا:

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

طباعة ب 1 scrollers 0 ?

هل كانت مفيدة؟

المحلول

الشيء الوحيد الذي قد تم اصطياد في IKImageViewDemo أن الصورة كانت أسرع لتناسب في windowDidResize: طريقة ([_imageView zoomImageToFit: self]).

تضمين IKImageView في NSScrollView هو الشيء الصحيح القيام به.من أجل الحصول على التمرير إلى متابعة النافذة كما يمكنك تغيير حجمه ، تحتاج إلى ضبط الينابيع الدعامات (== autoresizing قناع) في واجهة البناء.

إضافة: كما كنت قد لاحظت ، هناك خلل في نظام التشغيل Mac OS X 10.6 الذي يسبب هذه لا تعمل بشكل صحيح.يمكنك حل المشكلة عن طريق subclassing NSScrollView على النحو التالي:

@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

جرب هذا:

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

انها نسخة من IKImageViewDemo مع أشرطة التمرير و الحل البديل أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top