【发布时间】:2017-09-02 07:37:43
【问题描述】:
最近我们的应用需要在图片获取逻辑上进行替换,这样客户端应该请求一个与其大小相同的图片(图片是从服务器动态构建的)。
图片网址格式如下:
http://image.server.url/path?width={{width}}&height={{height}}
大部分自定义视图都是按照以下模式构建的:
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
// do some initializations
}
return self;
}
- (void)setImageURL:(NSURL *)URL {
// do image fetching
}
它被实例化为:
SomeView *view = [[SomeView alloc] init];
view.imageURL = [NSURL URLWithString:@"..."];
[self addSubview:view];
这不是问题(因为所有图像的大小都是静态的),但是当请求具有动态大小的图像时不可用,因为在调用 -layoutSubviews 之前运行图像提取,目标图像容器的大小始终为零。
毕竟,我们需要弄清楚布局完成的时间(对图像容器使用观察者),或者为所有图像容器设置静态大小。
什么是最好的解决方案?
【问题讨论】:
-
最好的解决方案是异步加载网络资产,即。下载完成后,您可以使用“什么是真实的”来更新您的 UI。实际上,这意味着在加载网络资产时,您要么显示动画进度图形(“正在加载!等待!”),要么显示占位符资产(获得真实的低分辨率图形)
标签: ios objective-c image request size