• colorWithPatternImage, stretchableImageWithLeftCapWidth


    一般我们设置 一个view的背景  可以通过  在view上放一个imageView 来显示背景图片

    这里介绍另外一种方法

    可以直接通过改变view.backgroundColor的值 来达到上面的效果

    self.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageWithName:@"XXX"]];

     这样就能达到上面  imageView的效果     

    但是用第二种方法在测试的时候  巨占内存   在ipad上显示一张 1024*768的图片  在模拟器器上查看内存  发现

    第二中方法  占3.8mb   第一种只占用几十kb

    用colorWithPatternImage设置view背景色太占内存,替代方法

    之前的一个iPad项目,由于支持旋转,背景图又不一样,采用在旋转时使用下面代码设置背景色:

        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"main_landscape.jpg"]];
    结果程序一启动就占很大内存,在第一代iPad上转几次就出现内存警告,退出。

    今天打算优化一下,发现使用上面的代码占了6MB多内存!一旋转又多了6MB。。。
    感觉是这个函数的问题,开始打算用UIImageView代替,可是旋转时,UIImageView的大小变动,会漏出底部的背景色。
    最后google搜索,得到两种解决办法:
    1.self.view = imageView;(如果支持触摸要加上imageView.userInteractionEnabled = YES;)
    2. UImage *image = [UIImage imageNamed:@"name.png"];
         self.view.layer.contents = (id) image.CGImage;
    我采用了第二个办法,哇,省了十多MB内存。


    ps,由于我这里每次旋转都要设置,所以采用了imageNamed方法,如果仅调用一次,可以使用imageWithContentsOfFile

    stretchableImageWithLeftCapWidth

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:

    (NSInteger)topCapHeight 这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。

    根据设置的宽度和高度,将接下来的一个像素进行左右扩展和上下拉伸。

    注意:可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。

    参数的意义是,如果参数指定10,5。那么,图片左边10个像素,上边5个像素。不会被拉伸,x坐标为11和一个像素会被横向复制,y坐标为6的一个像素会被纵向复制。

    注意:只是对一个像素进行复制到一定宽度。而图像后面的剩余像素也不会被拉伸。

  • 相关阅读:
    RESTful 、RESTful API 、REST 介绍
    微服务 第三章:SpringBoot 创建web项目(调用jsp)
    微服务 第二章:SpringBoot 创建web项目(用Thymeleaf模板引擎)
    SpringBoot学习之 Thymeleaf
    Junit测试
    ---run-pat 测试 crontab 命令
    ---iproute2 策略路由
    ---曾经整混的两个词
    ---Under Ubuntu 14.04
    ---Ubuntu 14.04 虚拟机器和主机时间同步
  • 原文地址:https://www.cnblogs.com/chengfang/p/4175586.html
Copyright © 2020-2023  润新知