【问题标题】:UIScrollView Pinch and Zoom ONLY on center?UIScrollView 只在中心捏和缩放?
【发布时间】:2014-02-16 00:45:40
【问题描述】:

几天来一直试图解决这个问题。

假设我在 UISCrollView 中嵌入了一个 imageView,并且一切都正确实现了。

目前的运作方式:当用户捏合并缩放图像的右上角时,它会向右上角区域缩放。

我想要它的方式:我希望图像仅在 UIView 的中心缩放,而不管用户在照片上捏合的位置。

我正在考虑以某种方式拦截捏合手势识别器并对其进行修改,以使捏合位置始终位于屏幕的中心,但不确定是否可行。有任何想法吗?谢谢!

【问题讨论】:

    标签: ios uiview uiscrollview uigesturerecognizer


    【解决方案1】:

    在我看来,您有很多选择。我会陈述我认为最简单的一个(如果它不起作用,会更深入地研究)。

    子类UIScrollView 并覆盖它的layoutSubviews 方法,并使用它将滚动视图的visibleRect 设置为滚动视图的中心(这恰好是图像的中心,根据您的判断)截屏)。它将保持zoomLevel,因此您无需更改它。

    【讨论】:

    • 感谢您的回复!我在 layoutSubViews 方法中为 scrollView 更改什么属性? scrollView 似乎没有“visibleRect”属性?另外,我还需要补充一些细节。我希望缩放在黑色矩形居中的位置居中,所以如果我平移到右上角并捏合,黑色矩形的新中心位于右上角。无论用户在哪里捏,我都希望图片向右上角缩放,这就是现在的新中心。
    【解决方案2】:

    如果您希望仅在中心进行缩放,请使用 scrollViewDidZoom 委托方法。

    --代码--

    -(void)scrollViewDidZoom:(UIScrollView *)scrollView{
    
        CGFloat width = scrollView.contentSize.width/2;
        width =width-width/scrollView.zoomScale;
    
        CGFloat height = scrollView.contentSize.height/2;
        height =height-height/scrollView.zoomScale;
    
        scrollView.contentOffset = CGPointMake(width, height);
    }
    

    【讨论】:

    • 一段很棒的代码!还有一点我需要补充的细节。我希望缩放在黑色矩形居中的位置居中,所以如果我平移到右上角并捏合,黑色矩形的新中心位于右上角。无论用户在哪里捏,我都希望图片向右上角缩放,这是现在的新中心。另外,我需要考虑的滚动视图上有一些“contentInset”。
    猜你喜欢
    • 2019-01-22
    • 2017-09-23
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2023-03-28
    相关资源
    最近更新 更多