ios 图片拉伸resizableImageWithCapInsets:详解

2024-06-22 13:08

本文主要是介绍ios 图片拉伸resizableImageWithCapInsets:详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在项目中,我们常常用到一些做背景的图片需要拉伸,今天就来详细讲讲我对图片拉伸函数:”resizableImageWithCapInsets:“的理解

为了演示我先准备好了图片,并做了标注


我们在sb上摆两个按钮,一个用来做测试改变背景图片用,命名为“测试按钮”。另一个用以正常显示背景用(即不拉伸图片),命名为“默认显示”。点击按钮设置按钮背景。可以看到图片均匀被拉伸,铺满整个按钮。很多时候这不是我们想要的效果。

如果我们想向下面这样拉伸图片,两条红线以外的不拉伸,保持原状,只拉伸两条红线以内的部分我们改怎么做呢?显然要用到- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets这个函数。这个函数只有一个参数,类型是UIEdegInsets,这个参数由4个CGFloat构成,分别是top, left , bottom, right。top表示的是距离顶部多少像素不被拉伸,left表示左边多少像素不被拉伸以此类推。那么要达到我们刚才想要的效果就是设置top和buttom都为5个像素即可,效果如图,我们可以看到红线上下部分是没有被拉伸,至于中间部分为什么会呈现这样的状态。我们可以这样理解,我们的按钮宽高是大于图片的宽高的,我们沿着红线部分把img切开,这样有ABC 3部分,AB部分由于不做拉伸,直接放到按钮的上下边缘,但是这样左右仍然没有填满,那么它就复制一份AB向右边延伸。那么中间剩余的部分完全有B部分复制填满。这拉伸方式称为“瓦片式”。那么还有另一种填充方式。我们即将讲到。

- (IBAction)topBottomStay:(id)sender
{UIImage *resizeImg=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 0, 5, 0)];[self.btn setBackgroundImage:resizeImg forState:UIControlStateNormal];
}

下面我们来讲讲另一种方式,那么这要用到另一个函数  - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode);

这个函数有两个参数,第一个我们已经讲过,第二个则是拉伸模式,是一个枚举,包含两种模式(UIImageResizingModeTile,UIImageResizingModeStretch)第一中模式就是我们上面讲到的瓦片式,如果设置这个模式为UIImageResizingModeTile,那么这个函数和上面讲到的第一个包含一个参数的函数是没有区别的。那我们就来试试第二种模式看看效果是什么样的。

- (IBAction)topBottomStay:(id)sender
{//UIImage *resizeImg=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 0, 5, 0)];UIImage *resizeImg1=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 0, 5, 0) resizingMode:UIImageResizingModeStretch];[self.btn setBackgroundImage:resizeImg1 forState:UIControlStateNormal];
}


如图,我们可以看到AC部分仍然在上下边缘,高度没有被拉伸,但是为了铺满整个按钮,长度被拉伸到了和按钮一样。B部分仍然在中间,高度和宽度都被拉伸用来填满整个空白区域。这就是第二种模式(UIImageResizingModeStretch)。

那么想实现下面四边均不拉伸(只有中间部分拉伸)的效果我想大家也会做了,那就让我们来看看实际是怎么一种效果。


这里仍然有两种模式,我们先看第一种模式,左右我们已经知道是10个像素,你可以先猜猜是什么效果。

- (IBAction)borderStay:(id)sender {UIImage *resizeImg=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 10, 5, 10)];[self.btn setBackgroundImage:resizeImg forState:UIControlStateNormal];
}


结果和你想象的一样么?很明显这是沿红线把img切开,共分为9块,1、2、3、4部分宽高均不变,直接铺到按钮的四个角上,5、6、7、8分别铺到按钮的对应边上,长度(宽度)不够的复制补齐,剩余部分第9块复制补齐。

我们再来看看第二中模式

- (IBAction)borderStay:(id)sender {//UIImage *resizeImg=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 10, 5, 10)];UIImage *resizeImg=[self.img resizableImageWithCapInsets:UIEdgeInsetsMake(5, 10, 5, 10) resizingMode:UIImageResizingModeStretch];[self.btn setBackgroundImage:resizeImg forState:UIControlStateNormal];
}

这种模式和第一种模式的区别在于分成9块的摆放位置没有变,1、2、3、4宽高依然没有边之外,其他部分不是复制铺满,而是直接拉伸铺满。讲到这里我想大家已经很了解怎么拉伸图片了。



这篇关于ios 图片拉伸resizableImageWithCapInsets:详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084372

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ