TA的每日心情 | 汗 2024-10-15 10:05 |
---|
签到天数: 372 天 [LV.9]以坛为家II
|
一、基本思路
1、系统原生态的UIView只有设置背景颜色的方法,并不提供设置背景图片的方法,但有些场景下我们需要对view设置背景图片,尤其是继承自UIView的其他类,因经我们需要通过分类(Category)给UIView扩展一个设置背景图片的方法;
2、基本出发点是UIView的设置背景颜色方法中,有一个可以通过图片平铺来当作颜色使用,如果我们平铺的图片大小与当前的View大小正好相同,则只平铺一张,效果与背景图片完全一致;
3、问题来了,那我给一张大小相同的图片不就结了吗?这个其实是有漏洞的,比如屏幕适配的问题,你如何保证不同大小屏幕的手机都能正好铺满当前View呢?
4、废话不多说,先开启一个图片上下文,将图片以当前View大小渲染到图片上下文
5、取出当前上下文的图片
6、利用UIColor的colorWithPatternImage:方法将图片平铺上去
7、关闭图片上下文,搞定!
PS:写成UIView的分类,很多几乎所有的View都能用了,相当方便!
二、示例代码:
- //
- // 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
复制代码
|
|