1. UIImageView整体拉伸

方式一是通过设置容器UIImageView中图片的显示模式: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. UIImage局部拉伸

// 按4边间距显示不拉伸的区域
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0);
// 按2点拉伸
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
// 拉伸模式
typedef NS_ENUM(NSInteger, UIImageResizingMode) {UIImageResizingModeTile,//进行区域复制模式拉伸UIImageResizingModeStretch,//进行渐变复制模式拉伸
};

3.图形上下文等比例拉伸

//图片按比例内缩放,使一条边等于需要的一边长,另外一条边小于等于需要的另一边边长
- (UIImage *)scaleToSize:(CGSize)newSize
{CGFloat width = self.size.width;CGFloat height= self.size.height;CGFloat newSizeWidth = newSize.width;CGFloat newSizeHeight= newSize.height;if (width <= newSizeWidth &&height <= newSizeHeight) {return self;}if (width == 0 || height == 0 || newSizeHeight == 0 || newSizeWidth == 0) {return nil;}CGSize size;if (width / height > newSizeWidth / newSizeHeight) {size = CGSizeMake(newSizeWidth, newSizeWidth * height / width);} else {size = CGSizeMake(newSizeHeight * width / height, newSizeHeight);}CGSize drawSize = CGSizeMake(floor(size.width), floor(size.height));//Determine whether the screen is retinaif([[UIScreen mainScreen] scale] == 2.0){UIGraphicsBeginImageContextWithOptions(size, NO, 2.0);}else{UIGraphicsBeginImageContext(size);}[self drawInRect:CGRectMake(0, 0, drawSize.width, drawSize.height)];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;
}

4.Assets.xcassets

通过Xcode中Asset Catalog的slice和dice,我们不需要代码也能拉伸图片。首先在Xcode中选中图片,然后点击右下角的Show Slicing:

我们能看到slicing 面板和一个按钮”Start Slicing”。

在你点击按钮之后,会显示下面的三个选项:

左边的按钮用于horizontal edge insets,右边的按钮用于vertical edge insets,中间的则是两个都有。在我们的例子中要保留圆角,所以我们按中间的按钮,告诉系统我们想要按钮的中间在水平和垂直方向拉伸。在按下按钮之后,就能看到一些可以拖动的细条,这可以设置从哪里开始拉伸图片。

系统会保留深紫色的区域,浅紫色的区域会被拉伸。

更厉害的是,Xcode自动找到了圆角,所以我们不需要设置从哪里开始拉伸图片。最后别忘了在Attribtues pane中设置图片是可拉伸的。

如果我是你的话,我就会尝试并习惯这个功能。有了这个无价之宝,你就不用再在resizableImageWithCapInsets方法中填写那些神奇的数字了,也能帮助你分离view逻辑和app逻辑。


转自: 余成海的博客 https://my.oschina.net/iq19900204/blog/514371

iOS中对图片拉伸的四种方式相关推荐

  1. iOS之实现图片裁剪的几种方式

    iOS之实现图片裁剪的几种方式 1.使用CGImageCreateWithImageInRect函数 CGImageCreateWithImageInRect函数是属于Core Graphics Fr ...

  2. vue样式 引入图片_详解Vue.js中引入图片路径的几种方式

    vue --version 3.6.3 记录总结一下的Vue中引入图片路径的几种书写方式 vue中静态资源的引入机制 Vue.js关于静态资源的官方文档 静态资源可以通过两种方式进行处理: 在 Jav ...

  3. JavaScript中字符串连接/拼接的四种方式

    JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...

  4. Java中数组转List的四种方式

    第一种方式(未必最佳):使用ArrayList.asList(strArray) 使用Arrays工具类Arrays.asList(strArray)方式,转换完成后,只能对List数组进行查改,不能 ...

  5. ios 图片资源管理的四种方式(Assets,bundle文件,Resource,沙盒文件目录下)

    图片资源管理 1. Assets.xcassets 一般是以蓝色的Assets.xcassets的文件夹形式在工程中,以Image Set的形式管理.当一组图片放入的时候同时会生成描述文件Conten ...

  6. php图片背景平铺,css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  7. php如何平铺背景图片,css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  8. css 背景平铺 控制范围,css如何让背景图片平铺?css背景图片平铺四种方式介绍...

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

  9. css如何让背景图片平铺?css背景图片平铺四种方式介绍-前端教程

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...

最新文章

  1. 02. SQL表达式的灵活使用
  2. 动手学深度学习打卡之二。
  3. linux日志分析与痕迹清理
  4. vim环境设置(应用于python编程)
  5. 怎样批量获取文件名,批量提取文件名 文件名读取windows 批处理文件
  6. java 返回js_如何基于java或js获取URL返回状态码
  7. 如何查看电脑上是否安装有IIS服务
  8. 获取本周的周一和周日
  9. 利用python获取nginx服务的ip以及流量统计信息
  10. linux内核zfs,ZFS与Linux文件系统的变革
  11. 统计插件_头号攻略:怀旧服战场、PVP好用的插件推荐一览,很多都是必备品
  12. 十五天精通WCF——第四天 你一定要明白的通信单元Message
  13. python3帮助文档-中文
  14. Oracle全局索引和本地索引
  15. linux char大小,Linux基本数据类型大小——int,char,long int,long long int
  16. easyui datagrid mysql分页_Easyui 自定义分页_EasyUI 教程
  17. 求一个网页设计作业——个人博客(HTML+CSS)
  18. 小菜鸟的C++游戏编程学习日记(一)
  19. 大学计算机实验教程制作电子小报,word中电子小报怎么做?word电子小报的图文教程...
  20. 微信小程序【网易云音乐实战】(第六篇 歌曲搜索、自定义模板、分包)

热门文章

  1. 2022 第13届 中国大学生服务外包创新创业大赛 作品提交要求
  2. 南阳理工计算机专业在全国排第几,南阳理工学院怎么样 2021年全国排名多少
  3. linux下的shm目录
  4. uniapp之地图选点插件
  5. python事件是什么意思_Python的事件处理
  6. 赛效:在线查询QQ号价格评估的方法是什么
  7. 计算机开启远程服务与修改端口号教程
  8. 计算机应用云计算专业,计算机应用技术专业(云计算).PDF
  9. VulnHub-DevGuru: 1
  10. 战五渣系列之五(3分钟正则)