Quartz2D的基本使用(第五讲:使用Quartz2D给UIView扩展设置背景图片的分类)

一、基本思路

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

Leave a Reply