1

我有一个简单的 UIImageView,其图像大于显示器(600x1400)。图像以 Fit to Aspect 开始,因此 UIImgageView 报告的边界为 320x750,仍然大于显示,但没关系。我知道我想要缩放和定位到的相对于图像原始尺寸 (600x1400) 的点 (300, 150)。如果我设置一个基本动画来通过核心动画处理位置和缩放(缩放、变换),缩放就会发生,但我永远不会到达我想要的点。相反,看来我必须根据我将立即转换的比例来计算点。

我有什么明显的遗漏吗?我试过使用 convertPoint:toView,但它总是返回我刚刚给它的相同点。

4

1 回答 1

0

是的,当您设置视图的原点时,您是在其父视图的坐标空间中设置它。超级视图对子视图的比例一无所知,因此如果您需要移动到相对于图像缩放大小的坐标,则需要缩放坐标以匹配。这样做的数学是微不足道的,但是您可以使用 CGPointApplyAffineTransform () 函数来获取您可能已经用来通过其变换属性缩放 UIImageView 并将其应用于坐标的 CGAffineTransform。(另外,请记住坐标 0,0 在 iPhone 的左上角。)我不确定是否将 UIImageView 设置为缩放以适应是否会通过其变换属性进行缩放,但您可以轻松构建仿射变换以匹配当前视图的比例。

但是,我建议您将图像重新采样为较小的分辨率以节省内存并提高性能。600x1400 是一个相当大的图像,可以在 iPhone 上到处乱扔。 这篇文章有一些关于如何缩放 UIImages 的技巧。如果您将已知比例因子应用于图像,您可以简单地将该比例因子应用于所需坐标的 X 和 Y 分量。

于 2009-02-16T04:00:12.383 回答