通过缩放将UIImageView定位在另一个上

时间:2016-01-19 21:48:15

标签: ios objective-c uiimageview

UIImageView上是否有方法告诉我其图像在其边界内的位置?说我有一辆汽车的照片,如下:

car with missing wheel

这个图像是600x243,并且,后轮应该在哪里,有一个118,144,74,74(x,y,w,h)的洞。

我想让用户看到不同的后轮选项,我有几个车轮图像可供选择(所有方形,所以它们很容易缩放以匹配车内的孔)。

我想将汽车图像放在UIImageView中,根据布局大小是任意的,我希望看到整车的自然纵横比。所以我将图片视图的内容模式设置为UIViewContentModeScaleAspectFit,这非常有用。

例如,这是imageView中的汽车267x200:

enter image description here

我认为这样做可以将图像从w = 600缩放到w = 267,或者是267/600 = 0.445,并且(我认为)这意味着高度从200变为200 * 0.445 = 89 。而且我认为孔也是按照这个因素缩放的

但是我想添加一个UIImageView子视图来显示轮子,这是我感到困惑的地方。我知道图像大小,我知道imageView大小,我知道原始图像大小的孔框架。如何在缩放图像后获得孔框?

我尝试过这样的事情:

  1. 确定汽车图像在UIImageView中的位置。这就像是:

    float ratio=carImage.width/carImageView.frame.size.width;  // 0.445
    CGFloat yPos=(carImageView.frame.size.height-carImage.height)/2;  // there should be a method for this?
    
  2. 确定洞的缩放框架:

    CGFloat holeX = ratio*118;
    CGFloat holeY = yPos + ratio*144;
    CGFloat holeEdge = ratio*74;
    CGRect holeRect = CGRectMake(holeX,holeY,holeEdge,holeEdge);
    
  3. 但必须有更好的方法。这些计算(如果它们是正确的)仅适用于比汽车更高的汽车图像视图。如果图像视图更宽,则代码需要不同。

    我认为我可以为更广泛的观点制定逻辑,但它仍然可能是错误的。例如,yPos计算。文档是否说,对于内容模式= AspectFit,图像在较大维度内居中?我没有看到任何地方。

    请告诉我有更好的方法,或者,如果没有,是否证明我的想法适用于任意大小的图像,图像视图,孔?

    感谢。

1 个答案:

答案 0 :(得分:3)

最简单的解决方案(到目前为止)是对汽车图像和车轮选项图像使用相同的尺寸。

只需为滚轮选项提供透明填充(几乎在每个图形编辑程序中都很容易),并使用相同的框架将它们覆盖在汽车上。

您可以将资产规模增加一个微小的数量..但它会为您节省一个头脑和头颅的头疼 地狱 ,尤其是你正在缩放汽车图像。