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

Xcode UIScrollView zoom same as MKMapView zoom (no effect on subview)

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

(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

现在我想添加 MKMapView 的效果,如果我们放大或缩小地图的 MKMapView 位置标记将保持在相同的位置和相同的位置尺寸。怎么才能用UIScrollView缩放效果达到同样的效果呢

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

谢谢, 杰·斯蒂芬

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

说,最初你有一些对象(例如 UIImage),它在 x = 100.0y = 100.0zoomScale = 1.0 处是 center。定义一对 constants/variables 以将这些坐标存储在某处(例如,我们称它们为 initialXinitialY)。然后你在 UIScrollViewDelegate 协议的 - scrollViewDidZoom: 方法中跟踪 zoomScale 值,并简单地将初始(不是当前!)坐标乘以 zoomScale 的值。

例如(根据您的代码进行调整):

#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;
}

希望这对您有所帮助。