IKImageView و أشرطة التمرير
-
20-09-2019 - |
سؤال
أحاول استخدام 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 مع أشرطة التمرير و الحل البديل أعلاه.