Xcode UIScrollView缩放与MKMapView缩放相同(对子视图没有影响)

时间:2015-05-12 10:28:16

标签: ios objective-c uiscrollview mkmapview zoom

我想在我的UIScrollView上添加缩放效果。我用UIScrollView委托方法实现了它。

(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

现在我要添加MKMapView所具有的效果,如果我们放大或缩小地图的MKMapView位置标记,则保持在相同的位置和相同的大小。我们如何才能通过UIScrollView缩放效果实现相同的效果。

我最初的猜测是对CGAffineTransform做些什么。但问题是何时以及如何?

谢谢, 杰伊斯蒂芬。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望能够放大和缩小滚动视图,同时其上的所有可视对象保持"锚定"到他们的位置。我建议您使用UIScrollView zoomScale属性,该属性会告诉您应该应用于滚动视图的内容位置的乘数。

比如说,最初你有UIImagecenterx = 100.0的某个对象(例如y = 100.0)。zoomScale = 1.0。定义一些常量/变量以将这些坐标存储在某处(例如,让它们称为initialXinitialY)。然后,您可以在zoomScale协议的UIScrollViewDelegate方法中跟踪- scrollViewDidZoom:值,并简单地将初始(非当前!)坐标与zoomScale的值相乘。

E.g。 (调整你的代码):

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    CGFloat currentScale = scrollView.zoomScale;

    // Adjust object's position.
    CGPoint currentCenter = yourObject.center;

    currentCenter.x = initialX * currentScale;
    currentCenter.y = initialY * currentScale;

    yourObject.center = currentCenter;
}

希望这有帮助。