当需要保留图片中间、拉伸两端时

原理:

1、计算图片大小与目标大小差距,获得需拉伸的宽度;\
2、计算拉伸左边区域的 `UIEdgeInsets`,第一次拉伸后的图片宽度 ` tempStrecthWith`;\
3、生成拉伸左侧部分的图片;\
4、计算拉伸右侧区域的 `UIEdgeInsets` 及拉伸后的图片宽度;\
5、生成拉伸右侧部分的图片,结束;\
复制代码

注意:desSize目标大小,最好传入整数

代码

/**拉伸两端,保留中间@param image 需要拉伸的图片@param desSize 目标大小@param stretchLeftBorder 拉伸图片距离左边的距离@param top inset.top@param bottom inset.bottom@return 拉伸收缩后的图片*/
static UIImage *tt_stretch_both_sides_image(UIImage *image, CGSize desSize, CGFloat stretchLeftBorder, CGFloat top, CGFloat bottom) {if (!image) {return nil;}if (desSize.width == 0) {return nil;}CGSize imageSize = image.size;if (fabs(desSize.width - imageSize.width) <= 4) {return image;}imageSize.width = floor(imageSize.width);desSize.width   = floor(desSize.width);BOOL desSizeThan = desSize.width > imageSize.width;//各需要拉伸的宽度CGFloat needWidth = 0;needWidth = (desSize.width - imageSize.width) /2.0;//先拉取左边CGFloat left = stretchLeftBorder;CGFloat right = desSizeThan? (imageSize.width - left -1): (imageSize.width - fabs(needWidth) -left);//画图, 生成拉伸的左边后的图片CGFloat tempStrecthWith = 0;tempStrecthWith = imageSize.width + needWidth;//生成拉伸后的图片-》左CGFloat height = imageSize.height;UIImage *strectedImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, left, 0, right)];UIGraphicsBeginImageContextWithOptions(CGSizeMake(tempStrecthWith, height), NO, image.scale);[strectedImage drawInRect:CGRectMake(0, 0, tempStrecthWith, height)];strectedImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();//拉伸右边right = stretchLeftBorder;left  = desSizeThan? (strectedImage.size.width - right - 1): (strectedImage.size.width - right - fabs(needWidth));//生成拉伸后的图片-》右tempStrecthWith = desSize.width;strectedImage = [strectedImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, left, 0, right)];UIGraphicsBeginImageContextWithOptions(CGSizeMake(tempStrecthWith, height), NO, image.scale);[strectedImage drawInRect:CGRectMake(0, 0, tempStrecthWith, height)];strectedImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return [strectedImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, 0, bottom, 0)];
}
复制代码

iOS 图片拉伸、拉伸两端保留中间相关推荐

  1. iOS开发中拉伸图片的几种方式

    在iOS开发中,经常会遇到控件尺寸和图片大小不匹配的情况. 一些情况下, 我们需要对图片进行拉伸, 以满足美观需求. 总的来说, 图片的拉伸方式可以分为两种, 一种是通过Xcode自带的Show Sl ...

  2. ios 按钮图片拉伸_#UIButton#背景图片的拉伸

    如果不采用相应技术对button的背景图片进行拉伸,则显示的效果就会失真,效果: Snip20160823_7.png iOS中有三种方法对图片进行拉伸 // 方法一: - (void)viewDid ...

  3. ios 按钮图片拉伸_iOS中实现图片自适应拉伸效果的方法

    前言 在Android中实现图片的拉伸特别特别简单,甚至不用写一行代码,直接使用.9图片进行划线即可.但是iOS就没这么简单了,比如对于下面的一张图片(原始尺寸:200*103): 我们不做任何处理, ...

  4. iOS图片拉伸(resizableImage)

    返回一张受保护且被拉伸的图片 应用场景:聊天窗口的气泡 方法一(弃用): iOS 5.0以前使用(弃用)这个方法会自动计算出偏向中间的一个1*1的方格也就是被拉伸的地方(默认使用拉伸),一般传入的值为 ...

  5. iOS图片拉伸技巧-李明杰分享

    http://bbs.itcast.cn/thread-21436-1-1.html 本文目录 "一.iOS5.0之前------------------------------------ ...

  6. 【李明杰老师分享】iOS图片拉伸技巧

    纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能.极强的用户体验.华丽简洁的外观.华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂得怎么合理展示这些设 ...

  7. android自适应拉伸图片,Android 启动页-解决图片被拉伸和压缩问题,适配虚拟导航栏...

    Android 启动页设置非常简单 //styles.xml 设置主题 @drawable/bg_splash true //activity使用主题,这时点击app图标,就会显示@drawable/ ...

  8. android背景图拉伸,解决android:background背景图片被拉伸问题

    解决android:background背景图片被拉伸问题 ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而s ...

  9. wallpaper设置壁纸图片被拉伸

    时间:2021/04/07 之前公司不允许csdn,笔记写在其它地方.最近整理过来 问题描述: 原生壁纸设置壁纸之后,图片被拉伸.导出/data/system/users/0/wallpaper_in ...

  10. table vue 背景图片_table中background背景图片自动拉伸

    解决android:background背景图片被拉伸问题 ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而s ...

最新文章

  1. R语言ggplot2可视化在图形中添加箭头:直线箭头、弧形箭头
  2. linux 软件集成工具箱,在PB中动态修改SQL语句
  3. unable to execute dex:GC overhead limit exceeded unable to execute dex:java heap space 解决方案
  4. go方法的深入探究(7.21增补)
  5. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
  6. java继承与覆盖_简单的继承,方法重载与方法覆盖
  7. elk错误:Too Many Requests
  8. JavaScript:在JS中截取字符串的方法
  9. Spring注解注入原理
  10. 计算机设计大赛南京邮电大学,喜讯:我校信息学子在中国大学生计算机设计大赛中再创佳绩...
  11. 新萝卜家园windows xp 安装之后fonts中字体在 word ps中不显示
  12. linux拼音五笔输入法下载软件,自已动手制作Linux下拼音五笔输入法
  13. 如何使用计算机打勾,如何用电脑在方框里面打勾
  14. AutoCAD.net: 如何实现裁剪功能--Trim
  15. 12个CSS高级技巧汇总
  16. matlab使用pcode加密
  17. 服务器信号有杂音怎么回事,麦克风有杂音或电流声等的解决方法
  18. 常见的弱口令爆破工具
  19. Vue.js+ECharts:切换图表类型(图表工具栏)
  20. html 404错误页面模板,50款国外非常有意思的网页404错误页面模板

热门文章

  1. redis同步到磁盘
  2. Code First 下自动更新数据库结构(Automatic Migrations)
  3. c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
  4. 【C/C++】sizeof和strlen的一些比较
  5. linux防止文件和目录被意外删除或修改
  6. Linux之file命令
  7. 【资料下载】Python 第九讲——灵活运用docker,实现深度学习的环境搭建...
  8. 记一个有趣的Java OOM!
  9. linux 下 php 安装 libevent
  10. Web应用程序系统的多用户权限控制设计及实现-总述【1】