我有一个标准的 UIImageView
,其 ContentMode 设置为 UIContentModeAspectRatioFit
。
我试图找出如何获取图像相对于绝对坐标或 UIImageView
原点的位置。
这可能吗?我看过很多关于无法设置位置的帖子,但没有关于是否可以GET位置的帖子。
非常感谢, 布雷特
最佳答案
我知道这个问题已经得到解答,但我写了一个函数来计算 imageView 中图像相对于 imageView 的帧。
编辑:忘了最重要的。
+ (CGRect) imagePositionInImageView:(UIImageView*)imageView
{
float x = 0.0f;
float y = 0.0f;
float w = 0.0f;
float h = 0.0f;
CGFloat ratio = 0.0f;
CGFloat horizontalRatio = imageView.frame.size.width / imageView.image.size.width;
CGFloat verticalRatio = imageView.frame.size.height / imageView.image.size.height;
switch (imageView.contentMode) {
case UIViewContentModeScaleToFill:
w = imageView.frame.size.width;
h = imageView.frame.size.height;
break;
case UIViewContentModeScaleAspectFit:
// contents scaled to fit with fixed aspect. remainder is transparent
ratio = MIN(horizontalRatio, verticalRatio);
w = imageView.image.size.width*ratio;
h = imageView.image.size.height*ratio;
x = (horizontalRatio == ratio ? 0 : ((imageView.frame.size.width - w)/2));
y = (verticalRatio == ratio ? 0 : ((imageView.frame.size.height - h)/2));
break;
case UIViewContentModeScaleAspectFill:
// contents scaled to fill with fixed aspect. some portion of content may be clipped.
ratio = MAX(horizontalRatio, verticalRatio);
w = imageView.image.size.width*ratio;
h = imageView.image.size.height*ratio;
x = (horizontalRatio == ratio ? 0 : ((imageView.frame.size.width - w)/2));
y = (verticalRatio == ratio ? 0 : ((imageView.frame.size.height - h)/2));
break;
case UIViewContentModeCenter:
// contents remain same size. positioned adjusted.
w = imageView.image.size.width;
h = imageView.image.size.height;
x = (imageView.frame.size.width - w)/2;
y = (imageView.frame.size.height - h)/2;
break;
case UIViewContentModeTop:
w = imageView.image.size.width;
h = imageView.image.size.height;
x = (imageView.frame.size.width - w)/2;
break;
case UIViewContentModeBottom:
w = imageView.image.size.width;
h = imageView.image.size.height;
y = (imageView.frame.size.height - h);
x = (imageView.frame.size.width - w)/2;
break;
case UIViewContentModeLeft:
w = imageView.image.size.width;
h = imageView.image.size.height;
y = (imageView.frame.size.height - h)/2;
break;
case UIViewContentModeRight:
w = imageView.image.size.width;
h = imageView.image.size.height;
y = (imageView.frame.size.height - h)/2;
x = (imageView.frame.size.width - w);
break;
case UIViewContentModeTopLeft:
w = imageView.image.size.width;
h = imageView.image.size.height;
break;
case UIViewContentModeTopRight:
w = imageView.image.size.width;
h = imageView.image.size.height;
x = (imageView.frame.size.width - w);
break;
case UIViewContentModeBottomLeft:
w = imageView.image.size.width;
h = imageView.image.size.height;
y = (imageView.frame.size.height - h);
break;
case UIViewContentModeBottomRight:
w = imageView.image.size.width;
h = imageView.image.size.height;
y = (imageView.frame.size.height - h);
x = (imageView.frame.size.width - w);
default:
break;
}
return CGRectMake(x, y, w, h);
}
关于iPhone SDK-UIImageView : position of image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596832/