ikimageview 및 스크롤 막대
-
20-09-2019 - |
문제
나는 Apple이 제공하는 ikimageviewdemo를 사용하려고합니다.http://developer.apple.com/mac/library/samplecode/ikimageviewdemo/index.html) 그리고 나는 그것에 스크롤 바를 추가하려고 노력하고 있습니다. 두 가지를 시도했습니다.
1) scrollview에 ikimageview를 임베딩합니다. 이것은 이미지가 더 이상 있었던 곳에 위치하지 않았으며, 스크롤 바는 창문이 아무리 큰지에 상관없이 고정 장소에있는 것처럼 보였습니다 (그래서 창을 축소하고 스크롤 바를 잃을 수 있습니다. 스크롤 뷰가 창과 크기를 조정하도록 설정되었지만)
2) 나는 OpenImageUrl 메소드의 코드에 [_imageView sethashorizontalsCrollers : 예]를 추가했습니다. 이것은 아무것도하지 않은 것 같습니다.
내가 분명한 것을 놓치고 있습니까?
또한 : 왜
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);
B 1 스크롤러 0?
해결책
ikimageviewdemo에서 당신을 잡을 수있는 한 가지는 이미지가 확대되도록 확대되었다는 것입니다. windowDidResize:
방법 ([_imageView zoomImageToFit: self]
).
nsscrollview에 ikimageview를 포함시키는 것이 옳은 일입니다. 크기를 조정할 때 스크롤 바가 창을 따라 가도록하려면 인터페이스 빌더에서 스프링과 스트럿 (== 자동화 마스크)을 조정해야합니다.
부록: 알다시피, Mac OS X 10.6에는 버그가있어 제대로 작동하지 않습니다. 다음과 같이 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의 버전입니다.