Swift - 设置UIView的背景图片(平铺、拉伸)
作者:hangge | 2018-06-08 08:16
有时我们需要将 UIView 视图的背景设置为一个自定义的图片,而依据图片显示效果(平铺、还是拉伸)的不同又有不同的实现方式,下面通过样例分别进行演示。
1,平铺图片
(1)这种实现起来最简单,只需使用 backgroundColor 属性来设置背景图片即可,效果如下:
- 图片始终按照其实际尺寸显示。
- 当图片尺寸大于视图时也不会缩小。
- 当图片尺寸小于视图时会自动平铺,填满整个视图区域。
(2)样例代码
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //设置当前视图背景 self.view.backgroundColor = UIColor(patternImage: UIImage(named:"bg1.jpg")!) } }
2,拉伸图片
(1)这种方式是通过改变 layer 层的 contents 来实现的,效果是不管是小图还是大图,都会自动缩放成视图大小,从而完全显示。
(2)样例代码
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //设置当前视图背景 self.view.layer.contents = UIImage(named:"bg1.jpg")?.cgImage } }
3,等比缩放图片
当图片比例和视图比例不一致时,如果想要图片能填满整个视图区域,且比例又不会失真变形。有如下两种方法:
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //创建一个用于显示背景图片的imageView let backgroundImage = UIImageView(frame: UIScreen.main.bounds) backgroundImage.image = UIImage(named: "bg1.jpg") backgroundImage.contentMode = .scaleAspectFill //等比缩放填充(图片可能有部分显示不全) //将背景图片imageView插入到当前视图中 self.view.insertSubview(backgroundImage, at: 0) } }
(2)另一种是不借助 imageView,而是将原始图片先裁剪成指定尺寸或比例后,再设置为背景。
这里我对 UIImage 做了扩展,增加缩放和裁剪方法,具体可以参考我以前的这两篇文章:
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //计算视图比例 let ratio = UIScreen.main.bounds.width / UIScreen.main.bounds.height //根据比例裁剪出背景图 let image = UIImage(named:"bg1.jpg")?.crop(ratio: ratio) //设置当前视图背景 self.view.layer.contents = image?.cgImage } }
全部评论(0)