看看这个问题:Prevent UIScrollView from moving contents to top-left,我遇到了确切的问题。
我正在使用本教程:http://cocoadevblog.heroku.com/iphone-tutorial-uiimage-with-zooming-tapping-rotation
回到类似的问题,如果我禁用UIScrollViewPanGestureRecognizer,我将无法平移缩放的图像。
我在UIScrollView中有一个UIImageView,我希望能够缩放和平移图像。
如何在放大时禁用移动到左上角的内容?
答案 0 :(得分:2)
似乎我解决了在尺寸检查器\属性检查器中调整我的UiScrollView自动调整大小和原点。我取消选中Paging Enabled并且发生了魔法。
答案 1 :(得分:1)
以防万一其他人来到这里并且其他答案似乎都不起作用(这是我的情况),对我来说诀窍是设置scrollView的 contentSize 。只需将其设置为您放大的子视图的大小,它应该可以正常工作。
答案 2 :(得分:0)
缩小时,您希望内容居中吗?看看这个类似的SO question。真正的答案是向下的。
答案 3 :(得分:0)
创建UIScrollView的子类,并将此方法添加到它:
- (void)layoutSubviews {
[super layoutSubviews];
// center the image as it becomes smaller than the size of the screen
CGSize boundsSize = self.bounds.size;
//get the subView that is being zoomed
UIView *subView = [self.delegate viewForZoomingInScrollView:self];
if(subView)
{
CGRect frameToCenter = subView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
frameToCenter.origin.y = 0;
subView.frame = frameToCenter;
}
else
NSLog(@"No subView set for zooming in delegate");
}
答案 4 :(得分:0)
如果我理解正确,您只想在ImageView
放大时才允许滚动,然后scrollView.zoomScale > 1
。对于我的应用程序要求,我正在使用它。
按如下所示添加UIScrollView的委托方法并检查。
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
CGFloat offsetY = 0;
if (aScrollView.zoomScale > 1)
offsetY = aScrollView.contentOffset.y;
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, offsetY)];
}