放大时,UIScrollView会将图像移动到左上角

时间:2012-02-05 14:52:04

标签: objective-c uiscrollview uiimageview

看看这个问题:Prevent UIScrollView from moving contents to top-left,我遇到了确切的问题。

我正在使用本教程:http://cocoadevblog.heroku.com/iphone-tutorial-uiimage-with-zooming-tapping-rotation

回到类似的问题,如果我禁用UIScrollViewPanGestureRecognizer,我将无法平移缩放的图像。

我在UIScrollView中有一个UIImageView,我希望能够缩放和平移图像。

如何在放大时禁用移动到左上角的内容?

5 个答案:

答案 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)];
}