gpt4 book ai didi

ios - 获取 ImageView 图片原始大小

转载 作者:行者123 更新时间:2023-11-29 10:30:04 26 4
gpt4 key购买 nike

我有一个 TableViewCell 和一个 ImageView,我正在这样设置图像:

[self.contentImageView setImageWithURL:thumbnail_url];

contentMode 设置为 UIViewContentModeScaleAspectFill, subview 被裁剪。这最适合肖像或风景图像,但 UIViewContentModeScaleToFill 实际上更适合风景图像,因为风景图像数量更多。

所以,我想通过比较宽度和高度来检测图像的方向,并相应地更改 contentMode

起初,我试图检查/记录 ImageView.image 属性,在我从 url 设置它之后直接,但它显示为 nil。 不确定为什么……?

接下来,我决定将 NSURL 放入 NSData 对象中,然后根据该数据创建一个 UIImage,并设置 ImageView 的图像属性与该 iVar,如下所示:

NSData *data = [NSData dataWithContentsOfURL:thumbnail_url];
UIImage *image = [UIImage imageWithData:data];
[self.contentImageView setImage:image];
// Get image.size etc.

这 - 特别是 NSData 调用 - 大大减慢了 TableViewCell 的 的加载速度,所以我想避免它。

所以,我想知道在 contentMode 发生缩放之前,是否有办法访问 ImageViewun-cropped 源图像属性?

最佳答案

这里的问题是您误解了第一种方法的工作原理。 setImageWithURL: 是来自开源图像加载库之一的方法。可能是 AFNetworkingSDWebImage .

这些方法是异步的并且立即返回。他们将图像下载到后台队列,然后返回到主队列以使用它设置 View 。您正在尝试在下载之前访问 image。手动 NSData 方法之所以有效,是因为它是同步的,并且在图像下载时主队列卡住了。

我提到的两个库都有单独的方法,在主队列上有一个回调 block ,允许您根据响应采取行动。

对于 AFNetworking,您可以使用此方法:

- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest
placeholderImage:(UIImage *)placeholderImage
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure;

对于 SDWebImage 你可以使用这个方法:

- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;

在其中任何一个中,回调 block 都会让您在下载图像后访问图像(如果成功)。

您也可以使用 dataWithContentsOfURL: 方法手动完成类似的工作,方法是使用 GCD,如下所示:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^()
{
NSData *data = [NSData dataWithContentsOfURL:thumbnail_url];
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^()
{
[self.contentImageView setImage:image];
});
});

这是网络中使用的一种基本模式,用于在更新主队列上的 View 之前在后台队列上执行网络请求和处理。请记住,这段特定的代码非常简单,需要更多的工作才能像我上面提到的库一样好地工作。

关于ios - 获取 ImageView 图片原始大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109614/

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