有没有办法可以控制UIScrollView的哪些子视图缩放,哪些不是?
例如,我有一个地图作为底层(不是MapKit,只是一个平面图像),可以缩放和平移。根据用户的选择,标记将被放置在地图上以指示特定的建筑物/地点等。这些标记也是UIImageView,使用地图图像的像素坐标(eq Building X位于(934,842),标记被放置这里)。然而,放大这些标记有点难以看清,因为它们也会缩放/缩小到与地图相同的水平。
那么有没有一种方法可以告诉UIScrollView不缩放标记图像,但是当地图图像被缩放时仍允许它平移/重新定位它们?
答案 0 :(得分:1)
我认为您可能正在寻找的方法是UIScrollViewDelegate
的
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
这使您可以返回要应用缩放的视图,在这种情况下,这将是背景地图图像。
如果您不希望同时缩放标记,则需要将标记直接添加为UIScrollView
的子视图,而不是将它们添加为背景地图的子视图{{1 }}
正如您所提到的,标记相对于地图背景UIImageView
放置,这意味着如果您将标记添加到UIImageView
,它们将不会放置在相同的位置更改滚动后映射。
要解决此问题,您需要计算相对于UIScrollView
的等效坐标。
虽然这可能看起来相当令人生畏,但一旦你知道缩放系数,它实际上是微不足道的。
要获取缩放系数,请使用UIScrollView
方法
UIScrollViewDelegate
然后你可以通过调用:
获得缩放系数- (void)scrollViewDidZoom:(UIScrollView *)scrollView
并通过将此scrollView.zoomScale
应用于原始值来重新计算标记坐标,并相应地重新定位标记。
参考:
UIScrollViewDelegate Protocol Reference
希望这会有所帮助:)