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

UIViewContentMode 图文解说的更多相关文章

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

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  2. (转)xcode5.0.2下国际化图文解说

    原文:http://blog.csdn.net/dragoncheng/article/details/6703311 xcode5.0.2下国际化图文解说         分类:           ...

  3. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  4. 图文解说 Dijkstra.

    Dijkstra 太多文章了,有些简练,有些一笔带过.自己还是花了些时间才明白,刚脆自己写个图文说明的,希望能让还没明白的,尽快清楚. 问题:求某点到图中其他所有点的最短路径(权值和最小) Dijks ...

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

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第 ...

  6. Eclipse 安装 Maven 插件(图文解说)

    Help  --> 选择Eclipse Marketplace -->  在 Find 中输入 Maven integration for Eclipse  --> 回车搜索

  7. [C#] 图文解说调用WebServer实例

    本文旨在实现如何在.NET环境下调用WebServer,以天气接口为例进行说明. WebServer地址:http://www.webxml.com.cn/WebServices/WeatherWeb ...

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

    运行sql安装 单击安装-全新的sql server独立安装,如果我们准备好了故障转移群集,那么我们就可以创建故障转移群集sql 常规检查 一笑而过 选择版本,或者输入密钥自动识别版本 授权协议 支持 ...

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

    oracle11g下载页面:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html,找到适 ...

随机推荐

  1. 2、使用Struts2实现登录功能(没有连接数据)

    1.创建如下的目录结构 2.在com.entity包下创建 package com.entity; /** * 用户类 * @author Holly老师 * */ public class User ...

  2. ESFramework 4.0 进阶(01)-- 消息

    需要交互的分布式系统之间通过消息来传递有意义的信息.消息是通信框架的核心.离开了消息,再谈通信框架就没有任何意义,所以,消息是ESFramework中一个最核心的概念. 一. 消息的类别 在具体的应用 ...

  3. yum安装memcache,mongo扩展以及python的mysql模块安装

    //启动memcached/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -p 11211 -u root/usr/local/memca ...

  4. OAuth流程

    简介 OAuth是一种协议,OAuth协议为用户资源的授权提供了一个安全的.开放而又简易的标准 第三方若想访问用户资源,就必须遵守服务提供商实现的OAuth协议 OAuth授权的步骤(新浪微博为例) ...

  5. Just do it!!!

    从今日起,开个开发自己个人轻量级博客,加油!!!!!

  6. 关于Linode、Digitalocean、Vultr三款美国VPS服务商的用户体验

    曾几何时,虽然我们在海外VPS服务商中也可以看到各种大大小小的商家,但是真正能让Linode这样高富帅有竞争力的还真不多,这不当初在Linode商家512MB内存方案卖20美元一个月的时候,还是有很多 ...

  7. iosOC/C不可变数组排序

    //1.回顾C数组排序 int a[6] = {1,4,3,5,6,2}; //选择 for (int i =0; i<6-1; i++) { for (int j = i+1; j<6; ...

  8. TD缺陷通过excel导入QC11.0缺陷库

    在将TD升级到QC之前,参考了各种升级的方式,但是最终发现用excel导入缺陷到QC库是最简单方便的方法,实施步骤如下:1,首先登陆TD,将缺陷的所有信息显示在界面,然后使用缺陷工具将页面所有缺陷保存 ...

  9. Process 'command '/usr/lib/jvm/jdk1.8.0_25/bin/java'' finished with non-zero exit value 2

    这个问题有两种可能,第一是jar包或者依赖冲突(版本冲突也算).第二是65535. 对于65535的问题,请看http://blog.csdn.net/t12x3456/article/details ...

  10. FCFS

    (First Come First Served) 按照作业进入系统的先后次序来挑选作业,先进入系统的作业优先被挑选. FCFS算法的优缺点: 算法容易实现.但效率不高,只顾及作业等候时间,没考虑作业 ...