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" 在其位置。我建议您使用 UIScrollView
的 zoomScale
属性,它告诉您应该应用于滚动视图内容位置的乘数。
说,最初你有一些对象(例如 UIImage
),它在 x = 100.0
、y = 100.0
和 zoomScale = 1.0
处是 center
。定义一对 constants/variables 以将这些坐标存储在某处(例如,我们称它们为 initialX
和 initialY
)。然后你在 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;
}
希望这对您有所帮助。
我想在 UIScrollView
上添加缩放效果。我用 UIScrollView
委托方法实现了它。
(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
。
现在我想添加 MKMapView
的效果,如果我们放大或缩小地图的 MKMapView
位置标记将保持在相同的位置和相同的位置尺寸。怎么才能用UIScrollView
缩放效果达到同样的效果呢
我最初的猜测是用 CGAffineTransform
做点什么。但问题是何时以及如何?
谢谢, 杰·斯蒂芬
如果我理解正确,您希望能够放大和缩小滚动视图,同时其上的所有可视对象都保持 "anchored" 在其位置。我建议您使用 UIScrollView
的 zoomScale
属性,它告诉您应该应用于滚动视图内容位置的乘数。
说,最初你有一些对象(例如 UIImage
),它在 x = 100.0
、y = 100.0
和 zoomScale = 1.0
处是 center
。定义一对 constants/variables 以将这些坐标存储在某处(例如,我们称它们为 initialX
和 initialY
)。然后你在 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;
}
希望这对您有所帮助。