年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1906|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-12-1 16:10:42 | 显示全部楼层 |阅读模式
    一、基本思路

    1、系统原生态的UIView只有设置背景颜色的方法,并不提供设置背景图片的方法,但有些场景下我们需要对view设置背景图片,尤其是继承自UIView的其他类,因经我们需要通过分类(Category)给UIView扩展一个设置背景图片的方法;

    2、基本出发点是UIView的设置背景颜色方法中,有一个可以通过图片平铺来当作颜色使用,如果我们平铺的图片大小与当前的View大小正好相同,则只平铺一张,效果与背景图片完全一致;

    3、问题来了,那我给一张大小相同的图片不就结了吗?这个其实是有漏洞的,比如屏幕适配的问题,你如何保证不同大小屏幕的手机都能正好铺满当前View呢?


    4、废话不多说,先开启一个图片上下文,将图片以当前View大小渲染到图片上下文

    5、取出当前上下文的图片

    6、利用UIColor的colorWithPatternImage:方法将图片平铺上去


    7、关闭图片上下文,搞定!


    PS:写成UIView的分类,很多几乎所有的View都能用了,相当方便!


    二、示例代码:

    1. //
    2. //  UIView+SA.m
    3. //  MIG
    4. //
    5. //  Created by 余西安 on 14/12/1.
    6. //  Copyright (c) 2014年 Sian. All rights reserved.
    7. //
    8. #import "UIView+SA.h"
    9. @implementation UIView (SA)
    10. - (void)setBackground:(NSString *)imageName
    11. {
    12.     // 1、通过图片名加载图片对象
    13.     UIImage *image = [UIImage imageNamed:imageName];
    14.    
    15.     // 2、开启图片上下文
    16.     UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
    17.    
    18.     // 3、根据当前视图大小绘制一张相同大小图片
    19.     CGRect viewRect = self.bounds;
    20.     [image drawInRect:viewRect];
    21.    
    22.     // 4、取出该图片
    23.     UIImage *background = UIGraphicsGetImageFromCurrentImageContext();
    24.    
    25.     // 5、利用背景颜色设置方法将图片平铺上去
    26.     self.backgroundColor = [UIColor colorWithPatternImage:background];
    27.    
    28.     // 6、关闭图片上下文
    29.     UIGraphicsEndImageContext();
    30. }
    31. @end
    复制代码

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-29 10:13 , Processed in 0.052928 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表