objective-c - iOS - 数学帮助 - 使用捏合手势缩放基础图像需要覆盖图像调整相对的 X/Y 坐标

标签 objective-c ios image math scale

我有一个 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/

相关文章:

ios - UITextPosition 到 Int

ios - 对于最初为零大小的 View 的无法满足的布局约束,有更好的解决方法吗?

javascript - iOS PWA 音频限制

java - 在不损失质量的情况下读取/写入 JPG 图像的最快方法?

php - TCPDF 错误 :Unable to get the size of the image

c# - 修改时保留图像数据的最佳方法是什么?

ios - 调整 UIView 大小时动画无法按预期工作

iOS UIImageView 约束在表格单元格中不起作用

ios - 如何在 iOS 中缩放 ScrollView 图像?

ios - 如何根据另一个数组位置对数组进行排序?