一、基本思路
1、系统原生态的UIView只有设置背景颜色的方法,并不提供设置背景图片的方法,但有些场景下我们需要对view设置背景图片,尤其是继承自UIView的其他类,因经我们需要通过分类(Category)给UIView扩展一个设置背景图片的方法;
2、基本出发点是UIView的设置背景颜色方法中,有一个可以通过图片平铺来当作颜色使用,如果我们平铺的图片大小与当前的View大小正好相同,则只平铺一张,效果与背景图片完全一致;
3、问题来了,那我给一张大小相同的图片不就结了吗?这个其实是有漏洞的,比如屏幕适配的问题,你如何保证不同大小屏幕的手机都能正好铺满当前View呢?
4、废话不多说,先开启一个图片上下文,将图片以当前View大小渲染到图片上下文
5、取出当前上下文的图片
6、利用UIColor的colorWithPatternImage:方法将图片平铺上去
7、关闭图片上下文,搞定!
PS:写成UIView的分类,很多几乎所有的View都能用了,相当方便!
二、示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // // UIView+SA.m // MIG // // Created by 余西安 on 14/12/1. // Copyright (c) 2014年 Sian. All rights reserved. // #import "UIView+SA.h" @implementation UIView (SA) - (void)setBackground:(NSString *)imageName { // 1、通过图片名加载图片对象 UIImage *image = [UIImage imageNamed:imageName]; // 2、开启图片上下文 UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); // 3、根据当前视图大小绘制一张相同大小图片 CGRect viewRect = self.bounds; [image drawInRect:viewRect]; // 4、取出该图片 UIImage *background = UIGraphicsGetImageFromCurrentImageContext(); // 5、利用背景颜色设置方法将图片平铺上去 self.backgroundColor = [UIColor colorWithPatternImage:background]; // 6、关闭图片上下文 UIGraphicsEndImageContext(); } @end |