在iOS应用中,用户看到的一切都是视图(UIView),视图是有内容(content)的,包含图画。一个空白的视图可以任意绘画,你的代码决定视图绘制什么内容。
尺寸可变的图片(重要):
界面的某些地方有时候需要一张尺寸可变的图片。比如,有时候,你想要用一张图片以铺瓷砖或者拉伸的方式来填充背景。为了制作一张尺寸可变的图片,利用一张普通的图片,调用它的resizableImageWithCapInsets(capInsets:, resizingMode:) -> UIImage
方法。参数解释如下:
- capInsets
:类型是UIEdgeInsets,里面的四个参数代表的是距离图片四边的内边距
- resizingMode
:如果上下文要比图片大的话,尺寸可变的图片会有两种表现形式,取决于该参数的值。.Tile
以铺瓦转的形式用图片铺满内容;.Stretch
图片以拉伸的形式填充满内容。
假设UIImageView高度和宽度是固定的(这样就不会采用图片的尺寸了),而且contentMode
是.ScaleToFill
(这样图片就会表现出可变的行为)
首先使用.Tile
样式:
let v=UIImage(named: "star.png")
let //vr=v?.resizableImageWithCapInsets(UIEdgeInsetsZero, resizingMode: .Tile)
let vr=v!.resizableImageWithCapInsets(UIEdgeInsetsMake(v!.size.height/4.0, v!.size.width/4.0, v!.size.height/4.0, v!.size.width/4.0), resizingMode: .Tile)
self.iv=UIImageView(image: vr)
self.iv!.frame=CGRect(x: 100, y: 100, width: 100, height: 100)
我们再来看一下.Stretch
样式
let vr=v!.resizableImageWithCapInsets(UIEdgeInsetsMake(v!.size.height/4.0, v!.size.width/4.0, v!.size.height/4.0, v!.size.width/4.0), resizingMode: .Stretch)
通常的拉伸策略是让接近初始图片的一半作为CapInset,只留下中心的1或者2像素。
let vr=v!.resizableImageWithCapInsets(UIEdgeInsetsMake(v!.size.height/2.0-1, v!.size.width/2.0-1, v!.size.height/2.0-1, v!.size.width/2.0-1), resizingMode: .Stretch)
当然,我们不用代码就可以配置一个尺寸可变的图片,方法是在asset catalog中配置:选中图片——在属性检查器—Slicing部分配置,如图: