1

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

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

我怎样才能找出 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];
        }];

在调整位置:

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 以及我的图像是如何失去理智的

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

4

1 回答 1

0

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

- (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;
}

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

于 2013-05-09T15:22:43.343 回答