UIViewContentMode 图文解说

iOS应用开发中我们常常要对视图的contentMode属性进行设置,尤其在使用UIImageView视图时设置这个属性的概率很高。我们知道contentMode的类型是UIViewContentMode的枚举,那么其每个值是什么含义,设置后会有什么效果呢?下面就来总结下。

UIViewContentModeLeft

如果将UIImageView对象的contentMode设置为UIViewContentModeLeft,其内部的图片会按照原有的尺寸大小,以垂直居中,水平居左的方式显示。见UIViewContentModeLeft模式效果(1)。如果图片的尺寸大于UIImageView视图的size,那么超出size的部分将会被裁减掉。如UIViewContentModeLeft模式效果(2)所示。

               

UIViewContentModeLeft模式效果(1)                                                                   UIViewContentModeLeft模式效果(2)

至于其它模式,诸如UIViewContentModeRight、UIViewContentModeTop、UIViewContentModeCenter之类模式与UIViewContentModeLeft类似,只是对齐方式不同而已。我们可以看下UIViewContentModeCenter模式的显示效果。

              

          UIViewContentModeCenter模式效果(1)                                                         UIViewContentModeCenter模式效果(2)

由此我们可以得出这样的结论:UIViewContentModeLeft、UIViewContentModeRight等这类带有位置信息的模式,不会改变图片的尺寸,或者更确切地说不会对图片进行缩放处理,但有可能对图片进行裁剪操作,这仅发生在图片尺寸超出UIImageView视图size的情况下。

说完了UIViewContentModeLeft,我们来看看UIViewContentModeScaleAspectFit、UIViewContentModeScaleAspectFill、UIViewContentModeScaleToFill三个比较难理解、容易混淆的模式。

UIViewContentModeScaleAspectFit

                                     

UIViewContentModeScaleAspectFit模式效果

在UIViewContentModeScaleAspectFit模式下,UIImageView视图会将图片进行等比例缩放,请注意是等比例缩放。缩放到图片能够在视图size内完整显示(水平垂直方向均居中),且图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等。如果高度相等,则图片左右两边会留下等宽的空白空间,如上面UIViewContentModeScaleAspectFit模式效果所示;如果宽度相等,则图片的上下方会留下等高的空白空间;如果宽高都相等,则图片恰好铺满整个视图。UIViewContentModeScaleAspectFit模式使用等比例缩放,且不对图片进行裁剪,显示效果比较协调,因而是我们最为常用的一种模式。

UIViewContentModeScaleAspectFill

UIViewContentModeScaleAspectFill模式效果

UIViewContentModeScaleAspectFill模式也是对图片进行等比例缩放,与UIViewContentModeScaleAspectFit模式不同的是,它将图片缩放到正好铺满整个UIImageView视图显示,且图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等。如果高度相等,则图片左右会被裁剪掉等宽的内容;如果宽度相等,则图片的上下会被裁剪掉等高的内容,如上面UIViewContentModeScaleAspectFill模式效果所示;如果宽高都相等,则图片不会被裁剪。

UIViewContentModeScaleToFill

 UIViewContentModeScaleToFill模式效果

相较于UIViewContentModeScaleAspectFit和UIViewContentModeScaleAspectFill,UIViewContentModeScaleToFill模式好理解多了。它是将图片的宽高强行变成和UIImageView视图的宽高相等来显示,因此该变化无法保证是等比缩放。如果图片的宽高比与视图的宽高比相同,则是等比缩放,否则非等比缩放。这样极易导致图片变形,显示不协调。尽管如此,UIViewContentModeScaleToFill仍是比较常用的一种模式,某些视图(比如UIButton)的背景图backgroundImage就是以该模式为默认的显示模式。

UIViewContentModeRedraw

除了上述模式,UIViewContentMode还有一个枚举值UIViewContentModeRedraw。UIViewContentModeRedraw模式比较特别,它不是用来说明如何展示图片的,而是告诉视图在每次设置或者更改frame的时候自动调用drawRect:方法。

弄清楚了这些模式的含义和作用,我们就可以在开发iOS应用的过程中更加得心应手地设置图片了。

以上内容是本人结合开发经验并参考了部分资料而撰写的,如有不妥之处还请不吝赐教,愿大家能够互相学习,共同进步。

转自:http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/e20914053/article/details/49944281

时间: 2024-10-14 17:08:31

UIViewContentMode 图文解说的相关文章

图文解说:什么是数字签名

图文解说:什么是数字签名 数字签名简介 By David Youd 前言 最近在在网上浏览SSL协议加密有关的文章时,越感对"数字签名"产生了不小的困惑.直接搜索"什么是数字签名",发现了这篇早期文章: http://www.youdzone.com/signature.html,很早,但是依旧耐人寻味.在网贴上也找到了相关的翻译:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.h

图文解说 Dijkstra.

Dijkstra 太多文章了,有些简练,有些一笔带过.自己还是花了些时间才明白,刚脆自己写个图文说明的,希望能让还没明白的,尽快清楚. 问题:求某点到图中其他所有点的最短路径(权值和最小) Dijkstra.其实只有4个数据和3句话.明白了这3句话,这个算法就理解了. 第一个数据:还未到达的点的集合.noDone{顶点编号,权值}   顶点编号 和 原点到此编号最小权的候选值 第二个数据:源点 sourceVertex 第三个数据:最新到达的点 lastestVertex 第四个数据:最新到达的

图文解说:Nginx+tomcat配置集群负载均衡

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提

Qt编写串口通信程序全程图文解说

(说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们能够去 http://sourceforge.net/projects/qextserialport/files/ 进行下载,也能够去下载我上传到网上的: http://download.csdn.net/source/176278

64位win7下安装SQL Server 2008(图文解说版)

运行sql安装 单击安装-全新的sql server独立安装,如果我们准备好了故障转移群集,那么我们就可以创建故障转移群集sql 常规检查 一笑而过 选择版本,或者输入密钥自动识别版本 授权协议 支持文件安装 安装完成开始检查自身 俩警告,一个是.net警告,说没网络会延迟,或者需要下载文件 一个数要打开端口,无视了,晚点再打开 选择安装的功能,sql数据库和管理工具 选择实例 驱动器检查 选择服务账户,如图选择的是本地系统账户 验证模式:sql和本地模式两种,输入密码,另外添加管理员,可以添加

使用openfire,spark,fastpath webchat搭建在线咨询服务详细图文解说

这几天试用了下openfire相关应用,搭建一个简单的在线咨询服务,有点类似阿里旺旺,可以web页面在线咨询,也可以加为好友在pc客户端中咨询 使用场景:企业业务咨询 1.在官网http://www.igniterealtime.org/index.jsp,下载openfire,spark 2.安装spark.exe,解压openfire.zip 3.执行\openfire_3_9_3\openfire\bin\下的openfire.exe,点击launch admin进入管理员配置界面 4.配

图文解说视频直播原理-zz

本文主要介绍rtmp&hls视频直播原理,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 现在视频直播很火,应用场景很多,比如在线教育.美女秀场.在线医疗.电商活动.游戏直播.体育直播,中国好声音. 市面上与之相关的app也很多,比如搜狐视频.乐视体育.虎牙直播.9158,作为it人员我们可能更关心其背后的实现原理, 所以下面我们通过6张图来进行介绍: 图一:直播流程,以在线教育为例 说明:GotyeLive是

plsql无法连接64位oracle数据库的解决方法(图文解说)

oracle11g下载页面:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html,找到适合自己系统的数据库,需要将file1和file2都下载下来,压缩到同一个文件夹下才能进行安装,否则安装不了. 接着用免安装的plsql连接数据库试了试,发现没有连接的权限可选,如图 直接输入用户名.密码和数据库名,提示如下: 说明plsql是不可以直接连接64位oracle数据库,只能连接32位.既

七牛用户搭建c# sdk的图文解说

Qiniu 七牛问题解答 问题描述:很多客户属于小白类型.但是请不要随便喷七牛的文档站.因为需要一点http的专业知识才能了解七牛的api文档.现在我给大家弄个c# sdk的搭建步骤 问题解决方案 1,首先要在vs中安装nuget NuGet的安装(我的开发环境是Visual Studio 2013 旗舰版,故以此为例): 主菜单->工具->扩展和更新,打开如下界面,点击左侧的"联机"搜索nuget,然后搜索到安装. 2,应用nuget来安装qiniu sdk 你可以右键你