iOS中对图片拉伸的四种方式
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中对图片拉伸的四种方式相关推荐
- iOS之实现图片裁剪的几种方式
iOS之实现图片裁剪的几种方式 1.使用CGImageCreateWithImageInRect函数 CGImageCreateWithImageInRect函数是属于Core Graphics Fr ...
- vue样式 引入图片_详解Vue.js中引入图片路径的几种方式
vue --version 3.6.3 记录总结一下的Vue中引入图片路径的几种书写方式 vue中静态资源的引入机制 Vue.js关于静态资源的官方文档 静态资源可以通过两种方式进行处理: 在 Jav ...
- JavaScript中字符串连接/拼接的四种方式
JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...
- Java中数组转List的四种方式
第一种方式(未必最佳):使用ArrayList.asList(strArray) 使用Arrays工具类Arrays.asList(strArray)方式,转换完成后,只能对List数组进行查改,不能 ...
- ios 图片资源管理的四种方式(Assets,bundle文件,Resource,沙盒文件目录下)
图片资源管理 1. Assets.xcassets 一般是以蓝色的Assets.xcassets的文件夹形式在工程中,以Image Set的形式管理.当一组图片放入的时候同时会生成描述文件Conten ...
- php图片背景平铺,css如何让背景图片平铺?css背景图片平铺四种方式介绍
在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...
- php如何平铺背景图片,css如何让背景图片平铺?css背景图片平铺四种方式介绍
在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...
- css 背景平铺 控制范围,css如何让背景图片平铺?css背景图片平铺四种方式介绍...
在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...
- css如何让背景图片平铺?css背景图片平铺四种方式介绍-前端教程
在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本 ...
最新文章
- 02. SQL表达式的灵活使用
- 动手学深度学习打卡之二。
- linux日志分析与痕迹清理
- vim环境设置(应用于python编程)
- 怎样批量获取文件名,批量提取文件名 文件名读取windows 批处理文件
- java 返回js_如何基于java或js获取URL返回状态码
- 如何查看电脑上是否安装有IIS服务
- 获取本周的周一和周日
- 利用python获取nginx服务的ip以及流量统计信息
- linux内核zfs,ZFS与Linux文件系统的变革
- 统计插件_头号攻略:怀旧服战场、PVP好用的插件推荐一览,很多都是必备品
- 十五天精通WCF——第四天 你一定要明白的通信单元Message
- python3帮助文档-中文
- Oracle全局索引和本地索引
- linux char大小,Linux基本数据类型大小——int,char,long int,long long int
- easyui datagrid mysql分页_Easyui 自定义分页_EasyUI 教程
- 求一个网页设计作业——个人博客(HTML+CSS)
- 小菜鸟的C++游戏编程学习日记(一)
- 大学计算机实验教程制作电子小报,word中电子小报怎么做?word电子小报的图文教程...
- 微信小程序【网易云音乐实战】(第六篇 歌曲搜索、自定义模板、分包)