【发布时间】:2016-04-25 21:28:38
【问题描述】:
我问了一个与here 类似的问题,并得到了我接受的答案。我的新问题需要将常规的UIView 放置在图像视图上,从而使其他解决方案无法使用。所以,新的问题......
UIImageView 上是否有一种方法可以告诉我其图像在其边界内的位置?假设我有一张汽车的图像,如下所示:
这张图片是 600x243,并且,后轮应该在的位置,有一个 118,144,74,74 (x,y,w,h) 的孔。
我想将汽车图像放置在UIImageView 中,其大小基于布局是任意的,并且我想以自然的纵横比查看整辆车。所以我将图像视图的内容模式设置为UIViewContentModeScaleAspectFit,效果很好。
例如,这是 267x200 的 imageView 中的汽车:
我认为这样做会将图像从 w=600 缩放到 w=267,或者,缩放系数为 267/600=0.445,并且(我认为)这意味着高度从 200 变为 200*0.445=89 .而且我认为这个洞也确实被那个因素放大了
但我想在图像视图上方添加一个UIView(作为兄弟),这就是我感到困惑的地方。我知道图像大小,我知道 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); -
将holeRect转换为父视图的坐标系,为UIView兄弟创建框架。
[parentView convertRect:holeRect fromView:carImageView];
但是必须有更好的方法。这些计算(如果它们是正确的)仅适用于比汽车更高的汽车图像视图。如果图像视图更宽,代码需要不同。
我想我可以为更广阔的视野找出逻辑,但它仍然可能是错误的。比如那个yPos计算。文档是否说,对于内容模式 = AspectFit,图像在较大尺寸内居中?我没看到那个地方。
请告诉我有更好的方法,或者,如果没有,是否证明我的想法适用于任意大小的图像、图像视图、孔?
谢谢。
【问题讨论】:
标签: ios objective-c uiimageview