我正在使用SDWebImage从Web加载和映像并将其设置为地图上的标记。图像的URL可能会随时间而变化。因此我使用了一个保持稳定并指向原始网址的网址重定向。不幸的是,通过重定向加载时图像有问题。从重定向URL加载时,图像的大小始终是它应该的大小。从原始URL加载时正确绘制。
我添加了一个记录输出,用于输出图像大小。从重定向URL加载的图像的输出是88x88,而来自原始URL的图像的输出是44x44。图像的大小为88x88像素。我正在使用带有视网膜显示器的模拟器,因此我认为正确的尺寸应为44x44点。重定向URL肯定会重定向到正确的图像,我在浏览器中检查了它。同一图像的尺寸如何不同?
我的代码:
let url=NSURL(string:"http://redirectionurl/asdf")
// let url=NSURL(string:"http://originalurl.com/image@2x.png")
var managerCompletedBlock:(UIImage!, NSError!,SDImageCacheType,Bool) -> Void = {
image,error,cacheType,finished in
if(finished){
println("finished")
if let e = error
{
if let s = e.localizedDescription
{
println(s)
}
}
log.debug("size: \(image.size.width) \(image.size.height)")
imageToLoad.icon = image
} else {
println("fail!!!!");
}
}
self.imageManager.downloadWithURL(url, options: SDWebImageOptions.HighPriority, progress: nil, completed: managerCompletedBlock)
我做了一个截图。左侧的标记从原始网址加载,右侧的标记从重定向网址加载:http://bayimg.com/JAOPmaAFp
答案 0 :(得分:2)
SDWebImage在SDWebImageCompat.m中的SDScaledImageForKey方法中包含以下代码:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
CGFloat scale = 1.0;
if (key.length >= 8) {
// Search @2x. at the end of the string, before a 3 to 4 extension length (only if key len is 8 or more @2x. + 4 len ext)
NSRange range = [key rangeOfString:@"@2x." options:0 range:NSMakeRange(key.length - 8, 5)];
if (range.location != NSNotFound) {
scale = 2.0;
}
}
UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
image = scaledImage;
}
您会注意到它已检测到标准" @ 2x"在文件名中,并适当缩放图像。看起来它检查@ 2x的密钥默认情况下只是在传输重定向之前由传入的URL设置。
如果您现在有效,我可能只是更改您的重定向网址,以#34; @ 2x.png"结尾。或者,从快速浏览一下,看起来你可以"劫持"通过提供自己的cacheKeyFilter来获取URL缓存密钥(请查看自述文件以获取更多信息。)它可能不是出于此目的,但我猜测您是否提供了一个缓存密钥过滤器添加" @ 2x.png"最后,这可能确保一致的缩放行为。