在不缩放叠加层的情况下缩放背景图像

时间:2012-06-26 09:56:02

标签: iphone ios image zoom

我是iOS开发的初学者,我正在尝试显示一个需要可缩放和可扩展的图像(实际上是一个地图)。我的问题是我不知道如何添加一个叠加层,它将跟随平移线始终代表相同的位置,但不会被缩放缩放。将有几个叠加层,每个叠加层都必须是可点击的。

要缩放和平移图像(地图),我在UIImageView中添加了UIScrollView,但效果很好,但我不知道如何添加此功能。

我找到了这个帖子,但由于他的叠加层是静态的,所以它不是同一个问题: UIScrollview with two images - Keeping 1 image zoomable and 1 image static (fixed size)

我在android中开发了相同的应用程序,为了完成这项工作,我在屏幕坐标中转换了一个像素,这要归功于转换矩阵,我覆盖了onDraw方法来显示它,但我没有知道如何在iOS上做同样的事情,我不知道这是否是更好的解决方案。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

好的,所以我找到了一种方法,如果它可以帮助任何人:

我在scrollView中添加了我的叠加层,带有背景图片(地图)。

+CustomScrollView
----> UIImageView (map)
----> OverlayImageView (overlay)

要进行缩放,自定义滚动视图需要具有以下方法的委托:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    //The background image with the map
    return mapView;
}

//When a zoom occurs, move the overlay
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    UIImageView* overlayView = [scroll.subviews objectAtIndex:1];
    float x;
    float y;
    float width;
    float height;

    //keep the width and height of the overlay
    width = overlayView.frame.size.width;
    height = overlayView.frame.size.height;
    //Move it to stay over the same pixel of the map, and centers it
    x = (self.overlay.point.x * scroll.zoomScale - width/2);
    y = (self.overlay.point.y * scroll.zoomScale - height/2);

    overlayView.frame = CGRectMake(x,y,width,height);
} 

有了这个,我们说缩放只发生在背景图像上,但是当叠加在UIScrollView时,它会平移。所以我们唯一需要注意的是在缩放变化时移动叠加层,我们用scrollViewDidZoom方法知道它。

要处理触摸事件,我们会覆盖touchEnded:withEvent:的{​​{1}},如果只有一次点击,我们会将其转发到叠加层。我没有显示CustomScrollView,因为它只覆盖了同样的方法(OverlayImageView)来处理它。

toucheEnded:withEvent:

希望这会有所帮助。

答案 1 :(得分:0)

您可以将imageView作为overLay放在顶部,并将其userInteractionEnabled属性设置为NO。然后你必须以编程方式平移它。