我是iOS开发的初学者,我正在尝试显示一个需要可缩放和可扩展的图像(实际上是一个地图)。我的问题是我不知道如何添加一个叠加层,它将跟随平移线始终代表相同的位置,但不会被缩放缩放。将有几个叠加层,每个叠加层都必须是可点击的。
要缩放和平移图像(地图),我在UIImageView
中添加了UIScrollView
,但效果很好,但我不知道如何添加此功能。
我找到了这个帖子,但由于他的叠加层是静态的,所以它不是同一个问题: UIScrollview with two images - Keeping 1 image zoomable and 1 image static (fixed size)
我在android中开发了相同的应用程序,为了完成这项工作,我在屏幕坐标中转换了一个像素,这要归功于转换矩阵,我覆盖了onDraw方法来显示它,但我没有知道如何在iOS上做同样的事情,我不知道这是否是更好的解决方案。
感谢您的帮助。
答案 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。然后你必须以编程方式平移它。