UIImageView 查找超出范围的数量

Posted

技术标签:

【中文标题】UIImageView 查找超出范围的数量【英文标题】:UIImageView finding how much is out of bounds 【发布时间】:2013-05-09 14:32:30 【问题描述】:

我正在使用 UIImageView 缩放图像:UIViewContentModeScaleAspectFill

图像可以很好地缩放,但我的问题是 ImageView 位于 UIScrollView 中,我已将原点设置为 0,0。这对于我正在使用的大多数图像来说都很好,但有些图像的高度更高并且超出了界限。我不想修剪图像,我想根据超出范围的数量在 Y 轴上动态地将 UIImageView 框架向下推。

我怎样才能找出 Y 轴/高度上超出范围的内容?请原谅糟糕的代码示例。

NSString *ImageURL = [self.detailItem objectForKey:@"job_header"];

        anImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, MAX_HEIGHT, 118)];
        anImage.contentMode = UIViewContentModeScaleAspectFill;
        [anImage setImageWithURL:[NSURL URLWithString:ImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) 
             //Adjust the frame once the image is loaded
             [self adjustPositions];
        ];

在adjustPosition内:

if (anImage.image.size.height > MAX_HEIGHT) 
    CGRect myFrame = anImage.frame;
    myFrame.origin.y = 100;
    myFrame.origin.y = anImage.frame.size.height / anImage.image.size.height;
    anImage.frame = myFrame;

我也在使用:SDWebImage,这是 Q 相关的,可以更好地解释我的问题:UIImageView, setClipsToBounds and how my images are losing their head

请注意,我根本不想剪裁边界。我想保留边界并将原点移动到真正的 (0,0) 位置。

【问题讨论】:

【参考方案1】:

这是一种可以计算图像视图中图像大小的方法。 originalSize 是图像的大小,constraint 是图像视图的大小。

- (CGSize) size: (CGSize) originalSize constrainedToSize: (CGSize) constraint

    CGFloat ratioOriginal = originalSize.width/originalSize.height;
    CGFloat ratioConstraint = constraint.width/constraint.height;

    CGSize resultingSize = CGSizeZero;

    if (ratioConstraint >= ratioOriginal) 
            resultingSize = CGSizeMake(constraint.width, originalSize.height*constraint.width/originalSize.width);
    else
            resultingSize = CGSizeMake(constraint.height*originalSize.width/originalSize.height, constraint.height);
    

    return resultingSize;

通过图像视图中的图像大小,您可以计算出图像有多少超出范围。

【讨论】:

关闭但没有雪茄,我现在遇到的问题是差距比预期的要大。因此,我将图像帧 origin.y 移动了 resultSize.height。我发现差距太大,所以我认为边界可能均匀分布在顶部/底部。将结果除以 2 后,我离得更近了一点,但图像仍然在顶部吃掉了一小部分。我的目标是0,0。但显然图像边界造成了困难。我想知道我是否应该放弃并使用适当的图像缩放库,它不会有任何越界...... 我能够实现合理的比例调整大小,同时仍然使用 SDWebImage 的异步/缓存功能,并具有以下功能:github.com/toptierlabs/ImageCacheResize 我遇到的唯一问题是它使用的是旧版本,而不是维护,但它确实有效。

以上是关于UIImageView 查找超出范围的数量的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询返回超出范围内允许数量的记录

在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围

下标超出范围 - 使用Excel VBA查找下一个

在 SQL Server 中出现“超出范围值”错误后如何查找错误日期?

由于索引超出范围,无法设置列标题文本

参数索引超出范围(4 > 参数个数,即 3)