今天咱们讲述的是图片相关问题。而在开发中总会遇到图片拉伸问题。通常状况下会有以下的处理方式:
1.因为加载的图片是网络图片,咱们通常都会去改变的是UIImageView
的contentMode
属性。而且也提供了好多种显示模式,咱们能够根据相关的需求,调整不一样的电视模式。网络
typedef NS_ENUM(NSInteger, UIViewContentMode) {
UIViewContentModeScaleToFill, // 默认 拉伸(会变形)
UIViewContentModeScaleAspectFit, // 等比例拉伸
UIViewContentModeScaleAspectFill, // 等比例填充
UIViewContentModeRedraw, // redraw on bounds change (这个不清楚)
UIViewContentModeCenter, // 下面的就是不拉伸按位置显示了
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
};
复制代码
2.图片的四个角不拉伸,让中间的区域去拉伸。在开发中,作聊气泡的时候用到的比较多。这样的问题有两种方法。 第一种测试
// 按4边间距显示不拉伸的区域
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0);
复制代码
这个方法的使用网上能够找到不少。这里就很少叙述。
第二种,本地图片咱们都放在项目中的Assets.xcassets
中,咱们点击想要拉伸的图片,而后点击右下角的Show Slicing
按钮 ui
None
Horizonta
Vertical
Horizonta and Vertical
复制代码
咱们是作聊天气泡的 因此我就选择了Horizonta and Vertical
可是今天主要的不是上面哪两种拉伸状况,如今出现了第三种那就是中间部分不拉伸,两边的部分拉伸就好了。 spa
- (UIImage *)doubleStretchLeftAndRightWithContainerSize:(CGSize)size image:(UIImage *)oraimage
{
CGSize imageSize = oraimage.size;
CGSize bgSize = size;
//1.第一次拉伸右边 保护左边
UIImage *image = [oraimage stretchableImageWithLeftCapWidth:imageSize.width -1 topCapHeight:0];
//第一次拉伸的距离以后图片总宽度
CGFloat tempWidth = (bgSize.width)/2 + imageSize.width/2;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(tempWidth, imageSize.height), NO, [UIScreen mainScreen].scale);
[image drawInRect:CGRectMake(0, 0, tempWidth, bgSize.height)];
//拿到拉伸过的图片
UIImage *firstStrechImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//2.第二次拉伸左边 保护右边
UIImage *secondStrechImage = [firstStrechImage stretchableImageWithLeftCapWidth:firstStrechImage.size.width *0.2 topCapHeight:0];
return secondStrechImage;
}
复制代码
通过测试,这样就能够解决中间凹陷部分不变形的问题了3d