我有一个UIImageView内部UIScrollView用于缩放和滚动.如果滚动视图的图像/内容大于滚动视图,则一切正常.但是,当图像变得小于滚动视图时,它会粘在滚动视图的左上角.我想让它保持中心,就像照片应用程序一样.
任何关于在UIScrollView较小时保持居中内容的想法或例子?
我正在使用iPhone 3.0.
以下代码几乎可以使用.如果在达到最小缩放级别后将其捏住,图像将返回到左上角.
- (void)loadView {
[super loadView];
// set up main scroll view
imageScrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
[imageScrollView setBackgroundColor:[UIColor blackColor]];
[imageScrollView setDelegate:self];
[imageScrollView setBouncesZoom:YES];
[[self view] addSubview:imageScrollView];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WeCanDoIt.png"]];
[imageView setTag:ZOOM_VIEW_TAG];
[imageScrollView setContentSize:[imageView frame].size];
[imageScrollView addSubview:imageView];
CGSize imageSize = imageView.image.size;
[imageView release];
CGSize maxSize = imageScrollView.frame.size;
CGFloat widthRatio = maxSize.width / imageSize.width;
CGFloat heightRatio = maxSize.height / imageSize.height;
CGFloat initialZoom = (widthRatio > …Run Code Online (Sandbox Code Playgroud) 执行摘要:
有时UIScrollView会对值进行不必要的更改contentOffset,从而导致应用程序在正在查看的文档中显示错误的位置.不必要的更改与滚动视图的动画更改一起发生zoomScale.
详细信息:
与缩小,当我遇到问题CATiledLayer的UIScrollView.该CATiledLayer持有PDF,并在contentOffset一定范围内,当我缩小,将contentOffset被改变(这是BUG)变焦发生之前.在contentOffset似乎在苹果的代码被改变.
为了说明这个问题,我修改了Apple的示例应用程序ZoomingPDFViewer.代码在github上:https://github.com/DirkMaas/ZoomingPDFViewer-bug
点按将导致zoomScale更改为0.5,使用animateWithDuration,因此缩小.如果UIScrollView's contentOffset.y小于约2700或大于5900,则zoomScale动画效果正常.如果contentOffset.y在这两个值之间发生点击,contentOffset.y则会跳转(不动画)到约2700,然后zoomScale动画将发生,但同时会发生滚动,因此当动画完成时,contentOffset.y就是它的位置应该.但跳跃从何而来?
例如,说contentOffset.y屏幕被点击时是2000:zoomScale动画效果很好; contentOffset.y没有改变.
但是如果在contentOffset.y点击屏幕时为4000,那么contentOffset.y将在没有动画的情况下跳转到大约2700,然后缩放和滚动将从该点开始并同时发生.当动画完成时,看起来好像我们从4000直接缩放,所以我们最终在正确的位置,但行为是错误的.
关于用户界面的说明:
zoomScale设置为0.5; 变化是动画的我注意到如果zoomScale大于0.5,那么跳跃不会那么大.此外,如果我使用setZoomScale:animated:而不是animateWithDuration,错误消失,但我不能使用它,因为我需要链接动画.
以下是我所做的总结(github中的代码包含这些更改):