UIScrollView有多个缩放级别?

时间:2012-01-10 23:57:45

标签: iphone uiscrollview zoom scale

有没有办法可以控制UIScrollView的哪些子视图缩放,哪些不是?

例如,我有一个地图作为底层(不是MapKit,只是一个平面图像),可以缩放和平移。根据用户的选择,标记将被放置在地图上以指示特定的建筑物/地点等。这些标记也是UIImageView,使用地图图像的像素坐标(eq Building X位于(934,842),标记被放置这里)。然而,放大这些标记有点难以看清,因为它们也会缩放/缩小到与地图相同的水平。

那么有没有一种方法可以告诉UIScrollView不缩放标记图像,但是当地图图像被缩放时仍允许它平移/重新定位它们?

1 个答案:

答案 0 :(得分:1)

我认为您可能正在寻找的方法是UIScrollViewDelegate

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

这使您可以返回要应用缩放的视图,在这种情况下,这将是背景地图图像。

如果您不希望同时缩放标记,则需要将标记直接添加为UIScrollView的子视图,而不是将它们添加为背景地图的子视图{{1 }}

正如您所提到的,标记相对于地图背景UIImageView放置,这意味着如果您将标记添加到UIImageView,它们将不会放置在相同的位置更改滚动后映射。

要解决此问题,您需要计算相对于UIScrollView的等效坐标。

虽然这可能看起来相当令人生畏,但一旦你知道缩放系数,它实际上是微不足道的。

要获取缩放系数,请使用UIScrollView方法

UIScrollViewDelegate

然后你可以通过调用:

获得缩放系数
- (void)scrollViewDidZoom:(UIScrollView *)scrollView

并通过将此scrollView.zoomScale 应用于原始值来重新计算标记坐标,并相应地重新定位标记。

参考:

UIScrollView Class Reference

UIScrollViewDelegate Protocol Reference

希望这会有所帮助:)