iPhone SDK-UIImageView : position of image

标签 iphone objective-c uiimageview

我有一个标准的 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/

相关文章:

iphone - 无法从 iPhone Safari 访问 MacBook 上的本地主机,显示加载栏然后失败?

ios - 如何修复 iOS 11 上的 UILabel intrinsicContentSize

objective-c - 如何使用 Objective-C 在 Mac Os X 中模拟 Unicode Char "key press"?

ios - 可用性警告尽管设置了 iOS 部署目标

ios - UITableViewRowAction - 一个的背景颜色会影响另一个

ios - 使用 xcode 和 swift 在 IOS 中向下触摸/向上触摸

ios - UIImageView 不会以编程方式更改尺寸

iphone - 如何为uiTableView中的每个单元格设置不同的图像?

iphone - 使 NavigationBar Title 与上一个 View 中选择的表格单元格相同

html - 后台附件:已修复在 iOS 上不起作用