我的UIScrollView填充了大量内容,然后使用“setZoomScale:animated”进行缩放,使其适合滚动视图框架。视图显示正确缩小,并正确定位在滚动视图中。但是,用户可以在内容之外滚动(滚动视图背景颜色显示)。看起来他可以滚动到原始内容大小(就好像内容没有缩小)。 奇怪的是,在用户第一次手动缩放后,一切正常,滚动视图再次被限制为内容大小。
我搜索了网页,浏览了Apple文档和示例,但找不到任何人遇到同样的问题。 Apple的例子似乎和我一样。
我的内容是一个自定义视图,源自UIView,其CALayer被CATiledLayer取代(如Apple示例中所示)。我在drawLayer中做的绘图:inContext:。
以下是MyScrollViewController的代码片段:
- (void)loadView {
CGRect frame = [UIScreen mainScreen].applicationFrame;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.maximumZoomScale=1.0;
scrollView.delegate = self;
... setup theContentView ...
scrollView.contentSize = theContentView.bounds.size;
scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
[scrollView addSubview:theContentView];
self.view = scrollView;
double zoomScale = 0.5; // hardcoded for testing
[scrollView setZoomScale:zoomScale animated:NO];
NSLog(@"zoomscale=%g contentview=%@ contentsize=%@", zoomScale, NSStringFromCGSize(theContentView.bounds.size), NSStringFromCGSize(scrollView.contentSize));
[scrollView release];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return theContentView;
}
NSLog语句显示正确设置的contentSize和zoomscale ......
希望有一些明显的东西让我失踪......
答案 0 :(得分:3)
我最终在下一个runloop(而不是直接来自loadView)上设置了zoomScale,这有效:
- (void) loadView {
CGRect frame = [UIScreen mainScreen].applicationFrame;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.maximumZoomScale=1.0;
scrollView.delegate = self;
... setup theContentView ...
scrollView.contentSize = theContentView.bounds.size;
scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
[scrollView addSubview:theContentView];
self.view = scrollView;
// set the zoom level on the next runloop invocation
[self performSelector:@selector(initialZoom) withObject:nil afterDelay:0];
[scrollView release];
}
- (void) initialZoom {
double zoomScale = 0.5; // hardcoded for testing
UIScrollView *scrollView = (UIScrollView *) self.view;
[scrollView setZoomScale:zoomScale animated:NO];
}
Maverick1st建议的另一种可能性是从viewDidAppear而不是LoadView设置缩放比例。该方法的另一个优点是它显示了缩放动画,向用户指示视图以缩放状态开始。
- (void) viewDidAppear {
double zoomScale = 0.5; // hardcoded for testing
UIScrollView *scrollView = (UIScrollView *) self.view;
[scrollView setZoomScale:zoomScale animated:YES];
}
答案 1 :(得分:1)
我是新手,但您可以尝试剪切子视图。我创建了一个带有界面构建器的滚动视图,在属性检查器中有一个复选框剪辑子视图,所以我认为你应该这样做,只能以编程方式。希望有所帮助。