之前 做纯色局部拉伸 通过 top bottom left right 相交的阴影拉伸 屡试不爽
实施方法:
imageView.image = [[UIImage imageNamed: @"icon_helper_palace_day"] resizableImageWithCapInsets:palaceInset]];
我用这个方法 去拉伸一个 有图案的图的 相对纯色的那一部分时候 会发现 图片被拉伸的同时 会有被图片局部本身填充的现象 好像是连续的同一个1个半的图
这个时候 说明我没考虑到拉伸图片UIImage的一个属性
:
typedef NS_ENUM(NSInteger, UIImageResizingMode) {
UIImageResizingModeTile, // 进行区域复制模式拉伸 "填充"
UIImageResizingModeStretch,//进行渐变复制模式拉伸 "拉伸"
};
默认的属性 是前者 明显就是像素点 填充 就适合纯色填充拉伸的那种 那么 其他情况的拉伸 就应该用你 stretch的属性
实施如下:
imageView.image = [[UIImage imageNamed:@"icon_helper_palace_day"] resizableImageWithCapInsets:palaceInset resizingMode:UIImageResizingModeStretch];
真的就是拉伸如下图(背景宫殿 拉伸的是红色城墙部分)
这是 对本地图片的处理 很不错 , 但是同样一张图 从网络获取的 用同样这个方法 效果图 如下 :
宫殿在最底下呢 拉伸后看不见了只是 这是为啥 我研究半天甚至 自己写了一个demo打算求助网友, 我突然发现 网上传下来的图片 是 xx.png 而本地图片 则是 @2x @3x 这个 是关键区别!!!!说明 代码很诚实的表达了这种尴尬的情况, 对于网络下载的xx.png app一定默认为原图 也就是 "@1x" 一倍图 ,那我 还是想让他按本地图片一样效果 必须处理 按比例裁剪 即可:
UIImage *iconImage = [HFImageUtil scaleToSize:image newSize:[UIImage imageNamed:@"icon_helper_palace_day"].size];//按当前应用获取到的 2x 或者是 3x的本地图的应用级别的大小 裁剪
这样 再去拉伸 妥妥地正常了