如何让SDAnimatedImageView平铺50x50瓦片图以铺满全屏?
实现SDAnimatedImageView全屏平铺瓦片图方案
当然可以实现!你之前用拉伸导致效果差很正常——50x50的小图强行拉伸到全屏,模糊变形是必然的。下面给你一个直接有效的解决方案,结合SDWebImage的回调和iOS原生的图片平铺特性来搞定:
核心思路
先通过SDWebImage下载瓦片图,拿到原图后将其转换为可重复平铺的UIImage实例,再配合图层属性设置,让图片在全屏的SDAnimatedImageView中自动重复铺满,而非拉伸。
具体代码实现
替换你当前的[self sd_setImageWithURL:url];为以下代码:
[self sd_setImageWithURL:url completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { if (image) { // 将原图转换为可平铺的图片(capInsets设为0,启用平铺模式) UIImage *tiledImage = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile]; // 设置处理后的平铺图片 self.image = tiledImage; // 关键:设置图层内容的填充模式为平铺,替代默认的拉伸 self.layer.contentsGravity = kCAGravityResizeTile; } }];
代码说明
resizableImageWithCapInsets:resizingMode::这个方法用来创建可调整大小的图片,当capInsets设为UIEdgeInsetsZero且resizingMode选UIImageResizingModeTile时,图片会以重复平铺的方式填充空间,而非拉伸像素。self.layer.contentsGravity = kCAGravityResizeTile:这一步是关键,UIImageView默认的contentMode对应的图层填充模式是拉伸,我们需要手动将其改为平铺模式,确保图片在全屏范围内重复排列。
这样设置后,你的50x50瓦片图就会完美铺满整个SDAnimatedImageView,不会有任何拉伸模糊的问题啦!
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

