UIImageView
上是否有方法告诉我其图像在其边界内的位置?说我有一辆汽车的照片,如下:
这个图像是600x243,并且,后轮应该在哪里,有一个118,144,74,74(x,y,w,h)的洞。
我想让用户看到不同的后轮选项,我有几个车轮图像可供选择(所有方形,所以它们很容易缩放以匹配车内的孔)。
我想将汽车图像放在UIImageView
中,根据布局大小是任意的,我希望看到整车的自然纵横比。所以我将图片视图的内容模式设置为UIViewContentModeScaleAspectFit
,这非常有用。
例如,这是imageView中的汽车267x200:
我认为这样做可以将图像从w = 600缩放到w = 267,或者是267/600 = 0.445,并且(我认为)这意味着高度从200变为200 * 0.445 = 89 。而且我认为孔也是按照这个因素缩放的
但是我想添加一个UIImageView
子视图来显示轮子,这是我感到困惑的地方。我知道图像大小,我知道imageView大小,我知道原始图像大小的孔框架。如何在缩放图像后获得孔框?
我尝试过这样的事情:
确定汽车图像在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?
确定洞的缩放框架:
CGFloat holeX = ratio*118;
CGFloat holeY = yPos + ratio*144;
CGFloat holeEdge = ratio*74;
CGRect holeRect = CGRectMake(holeX,holeY,holeEdge,holeEdge);
但必须有更好的方法。这些计算(如果它们是正确的)仅适用于比汽车更高的汽车图像视图。如果图像视图更宽,则代码需要不同。
我认为我可以为更广泛的观点制定逻辑,但它仍然可能是错误的。例如,yPos
计算。文档是否说,对于内容模式= AspectFit,图像在较大维度内居中?我没有看到任何地方。
请告诉我有更好的方法,或者,如果没有,是否证明我的想法适用于任意大小的图像,图像视图,孔?
感谢。
答案 0 :(得分:3)
最简单的解决方案(到目前为止)是对汽车图像和车轮选项图像使用相同的尺寸。
只需为滚轮选项提供透明填充(几乎在每个图形编辑程序中都很容易),并使用相同的框架将它们覆盖在汽车上。
您可以将资产规模增加一个微小的数量..但它会为您节省一个头脑和头颅的头疼 地狱 ,尤其是你正在缩放汽车图像。