gpt4 book ai didi

ios - UIImageView、setClipsToBounds 以及我的图像如何失去理智

转载 作者:技术小花猫 更新时间:2023-10-29 10:53:32 25 4
gpt4 key购买 nike

我正在开发 iOS 4 应用程序。

我在 UITableViewCell 上的 UIImageView 上使用此代码:

cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];

我的图像比宽度高,当我设置 UIViewContentModeScaleAspectFill 时,图像会缩放以适应 UIImageView 宽度。这样做,图像变得比 UIImageView 大,我在 UIImageView 之外看到它。

然后,我需要使用 setClipsToBounds:YES 来不允许这样做,但现在我所有的图像都失去了理智。

有什么方法可以使用 UIViewContentModeScaleAspectFill 和居中左上角图像角与左上角 UIImageView 角?如果我需要失去图像的一部分,我宁愿失去它的脚而不是它的头。

更新

我正在使用 sdWebImage框架,我使用了 Vadim Yelagin 答案,这是我现在的代码:

[cell.photo setImageWithURL:[NSURL URLWithString:entry.photo]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(UIImage *image) {
CGFloat scaleX = cell.photoBorder.bounds.size.width / image.size.width;
CGFloat scaleY = cell.photoBorder.bounds.size.height / image.size.height;
CGFloat scale = MAX(scaleX, scaleY);
cell.photo.frame = CGRectMake(0, 0, image.size.width * scale, image.size.height * scale);
cell.photo.image = image;
}
failure:nil];

我必须等待加载所有图像并重新加载,然后在 UITableView 中移动才能在正确的单元格上看到正确的图像(这是因为图像已缓存并且加载速度更快)。

而不是使用 cell.photo.framecell.photo.image 我需要传递给 block indexPath.row 以获得正确的单元格。

我可以向 UIImageView+WebCache 添加一个新方法:

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(void (^)(UIImage *image, NSInteger row))success failure:(void (^)(NSError *error))failure;
{
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
}

但是如果我这样做,我会在这里得到一个错误:

[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];

因为现在 success 不是类型 (void (^)(UIImage *image))

你知道我该如何解决这个问题吗?

最佳答案

Afaik,最简单的方法是根据图像的大小和您希望它适合的框架手动计算 imageView 的框架。

使用您当前为 imageView 指定的框架创建一个 View ,使 imageView 成为其 subview 。设置 view.clipsToBounds = YES

然后当你分配一个图像时,做一些类似的事情

CGFloat scaleX = view.bounds.size.width / image.size.width;
CGFloat scaleY = view.bounds.size.height / image.size.height;
CGFloat scale = MAX(scaleX, scaleY);
imageView.frame = CGRectMake(0, 0, image.size.width * scale, image.size.height * scale);
imageView.image = image;

关于ios - UIImageView、setClipsToBounds 以及我的图像如何失去理智,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com