我有一个 iPad 应用程序,它有一个基本图像 UIImageView(在本例中是一个大型建筑物或 field 平面图或图表),然后可以在平面图上添加多个“图钉”(视觉上类似于 Google map )。这些引脚也是 UIImageView,并通过点击手势添加到主视图中。基础图像也会添加到 viewDidLoad 上的主视图中。
我有使用捏合手势进行缩放的基本图像,但显然,当您缩放基本图像时,所有引脚都保持在主视图的相同 x 和 y 坐标中,并且在基本图像上松散相对定位(其 x ,y 和宽度、高度坐标已更改)。
到目前为止我有这个...
- (IBAction)planZoom:(UIPinchGestureRecognizer *) recognizer;
{
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;
for (ZonePin *pin in planContainer.subviews) {
if ([pin isKindOfClass:[ZonePin class]]){
CGRect pinFrame = pin.frame;
// ****************************************
// code to reposition the pins goes here...
// ****************************************
pin.frame = pinFrame;
}
}
}
我需要帮助计算数学以重新定位引脚 x/y 坐标,以保留放大或缩小的平面图/图表上的相对位置。引脚显然不想在其宽度或高度方面进行缩放/缩放 - 它们只需要相对于平面图上初始位置的新 x 和 y 坐标。
我曾尝试自己计算出数学公式,但一直在努力解决这个问题,不幸的是,我对 SDK 还不够熟悉,无法知道是否有内置的可用规定来提供帮助。
帮助解决这个数学相关问题将非常感激! :)
非常感谢, 迈克尔. InNeedOfMathTuition.com
最佳答案
首先,您可以尝试将 UIImageView
嵌入到 UIScrollView
中,这样缩放就基本上为您完成了。然后,您可以轻松设置最大和最小比例,并且可以根据需要滚动缩放图像(特别是如果您的图钉是 UIImageView 的 subview 或 UIScrollView 内的其他内容) >).
至于缩放引脚的位置,我认为存储每个引脚的原始 x 和 y 坐标会起作用(即,当 View 首次加载时,当它们首次定位时,比例为 1.0)。然后,当 View 缩放时,设置x = (originalX * ZoomScale)
和y = (originalY * ZoomScale)
。
几年前,我在 iOS 应用程序中遇到了同样的问题,如果我没记错的话,我就是这样做的。
编辑:下面是有关我如何完成此操作的更多详细信息(我现在正在查看我的旧代码)。
我有一个 UIScrollView
作为我的主视图的 subview ,我的 UIImageView
作为它的 subview 。我的按钮已添加到 ScrollView 中,并且我保留了它们的原始位置(缩放 1.0)以供引用。
在-(void)scrollViewDidScroll:(UIScrollView *)scrollView
方法中:
for (id element in myButtons)
{
UIButton *theButton = (UIButton *)element;
CGPoint originalPoint = //get original location however you want
[theButton setFrame:CGRectMake(
(originalPoint.x - theButton.frame.size.width / 2) * scrollView.zoomScale,
(originalPoint.y - theButton.frame.size.height / 2) * scrollView.zoomScale,
theButton.frame.size.width, theButton.frame.size.height)];
}
对于 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
方法,我返回了我的 UIImageView
。我的按钮按比例缩放,但我没有将其包含在上面的代码中。如果您发现图钉的尺寸自动缩放,您可能必须存储其原始尺寸和原始坐标,并在 setFrame
调用中使用它们。
关于objective-c - iOS - 数学帮助 - 使用捏合手势缩放基础图像需要覆盖图像调整相对的 X/Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709280/