使用 AFNetworking setImageWithURL 设置 UIImageView 圆角:
Posted
技术标签:
【中文标题】使用 AFNetworking setImageWithURL 设置 UIImageView 圆角:【英文标题】:setting UIImageView rounded corners with AFNetworking setImageWithURL: 【发布时间】:2013-04-14 19:58:35 【问题描述】:这在 UIImageView 上不使用 AFNetworking 的类别方法时有效,但我意识到 AF 可能会覆盖所做的任何事情,因为这是异步发生的:
这是在我的自定义 UITableViewCell 中(自己是单元格):
NSURL *url = [NSURL URLWithString:video.thumbnail];
[self.imageView setImageWithURL:url
placeholderImage:[UIImage imageNamed:@"Logo.png"]];
// not working
CALayer *layer = [self.imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:10.0];
也尝试将它放在调用 setImageWithURL 之前。
这是我现在拥有的,它不是圆角:
NSURL *url = [NSURL URLWithString:_video.thumbnail];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
UIImage *placeHolder = [UIImage imageNamed:@"Logo"];
__weak UIImageView *imageView = self.thumbnail;
[self.thumbnail setImageWithURLRequest:request placeholderImage:placeHolder success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
imageView.image = image;
// round the edges of the video thumbnail
CALayer *layer = [imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:8.0];
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
NSLog(@"couldn't load image: %@", [error localizedDescription]);
];
【问题讨论】:
当你从一个 url 下载图像时,它需要一些时间取决于互联网的速度,在这种情况下,imageView 没有正确从 url 加载图像。您应该使用块或异步首先完全下载图像,然后从中提取层。 【参考方案1】:NSURLRequest *request = [NSURLRequest requestWithURL:url];
__weak UIImageView *imageView = self.imageView;
[self.imageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"Logo.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
imageView.image = image;
CALayer *layer = imageView.layer;
layer.masksToBounds = YES;
layer.cornerRadius = 10.0f;
failure:NULL];
【讨论】:
这就是我在回答中所说的那个。 :) @MarkW 你有没有#import <QuartzCore/QuartzCore.h>
这个工作正常。但是如果添加到uitbleviewcell图像uitableview不能平滑滚动。我该如何解决?【参考方案2】:
我从未使用过 AFNetworking,但我看到 setImageWithURL
方法的一个版本采用“成功”块。尝试使用该版本并在“成功”块中更新图像视图的层。
【讨论】:
【参考方案3】:https://github.com/rs/SDWebImage 上提供的 SDWebImage 库包括以下方法:
(void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock;以下代码是我正在处理的一个项目的示例实现,带有一个相当大的圆角。我在同一个项目中同时使用了 AFNetworking 和 SDWebImage。
__weak UIImageView * theImageView = self.imageView;
[self.imageView setImageWithURL:[NSURL URLWithString:user.imgurl] placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
// I only attempt to apply this if an image has been returned.
if (image)
theImageView.image = image;
CALayer * layer = theImageView.layer;
layer.masksToBounds = YES;
layer.cornerRadius = 20.0f;
];
【讨论】:
以上是关于使用 AFNetworking setImageWithURL 设置 UIImageView 圆角:的主要内容,如果未能解决你的问题,请参考以下文章