美文网首页
iOS 用代码来做图片拉伸的几种情况

iOS 用代码来做图片拉伸的几种情况

作者: 湮灭_尘事 | 来源:发表于2017-07-28 10:01 被阅读25次

一、图片拉伸(用代码来控制)

1、常用的拉伸方式:

  • 直接将图片设置为ImageView的image属性,也就是UIImageView的size有多大就显示多大,但是这样的缺点也是显而易见的,那就是图片会在变形;

2、像素点的拉伸

   - (UIImage*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;

这个函数的最大作用好像就是针对那些聊天气泡什么的,它的两个参数分别leftCapWidth和topCapHeight,这两个参数给定一个坐标,比如:

  UIImage * img= [UIImage imageNamed:@"1.png"];
  img = [img stretchableImageWithLeftCapWidth:1 topCapHeight:1];

这段代码的意思是将图片从左起第2个像素点,上起第2个像素点,坐标为(2,2)的像素点进行复制。将图片进行拉伸(就是横向的复制左起第二个像素点,纵向的父子上起的第二个像素点),但是也有一些地方也不行,例如你想一个如果被拉伸的图片中间也有需要拉伸的像素,这个方法就无能为力了,例如,如下的一张图片,我们需要将其拉伸放大:



便会出现这样的效果:


3、区域的拉伸

  - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;

这个函数需要设置一个UIEdgeInsets参数,UIEdgeInsets结构体如下:

  typedef struct UIEdgeInsets {
  CGFloat top, left, bottom, right;
  } UIEdgeInsets;

它分别对用了图片进行拉伸的区域距离顶部、左部、下部、右部的像素。比如,一个1010像素的图片,将UIEdgeInsets参数全部设置为1,则实际拉伸的部分就是中间的88的区域的像素。有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸:

  UIImage * img= [UIImage imageNamed:@"1.png"];
  img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1)];

结果如下:


4、拉伸模式的设置

  - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;

这个函数和上一个函数相比,唯一的差别是多了一个参数。这个参数是个枚举,如下:

  typedef NS_ENUM(NSInteger, UIImageResizingMode) {
  UIImageResizingModeTile,//进行区域复制模式拉伸
  UIImageResizingModeStretch,//进行渐变复制模式拉伸
  };

现在就明了了,我们只需要设置一下模式,就可以实现渐变拉伸了:

  UIImage * img= [UIImage imageNamed:@"11.png"];
  img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1, 1, 1, 1) resizingMode:UIImageResizingModeStretch];

来看一下效果:


相关文章

网友评论

      本文标题:iOS 用代码来做图片拉伸的几种情况

      本文链接:https://www.haomeiwen.com/subject/mrqtlxtx.html