• CALayer


    1、初识:CALayer的UIView内部的一个层,在IOS中所有能显示内容在屏幕上是的控件,其本质都是因为这个内部的layer层。当一个UIView要显示内容的时候,会调用

    -(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 方法

    将所有要显示的内容(在图形上下文ctx中,是一个CGContextRef类型的对象)绘制在layer上,绘制完成系统会拷贝layer上的内容到View上完成显示过程。自定义layer的意义就在于能够控制View显示的内容,达到标准控件无法显示的功能

    2、如何自定义

    * 可以像自定义UIView一样采用继承的方法。主要思路是自定义一个继承至CALayer的类,类内部实现drawLayer:inContext:方法,进行图形的绘制和渲染。使用自定义的类显示到屏幕上……

    //创建继承制CALayer的类JYLLayer并实现下面的方法
    #import "JYLlayer.h"
    
    @implementation JYLlayer
    -(void)drawInContext:(CGContextRef)ctx{
        CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 60, 60));
        CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
        CGContextFillPath(ctx);
    }
    @end
    
    //使用自定义的CALayer对象
    JYLlayer *layer=[JYLlayer layer];
        layer.bounds=CGRectMake(0, 0, 100, 100);
        layer.position=CGPointMake(100, 100);
        layer.backgroundColor=[UIColor orangeColor].CGColor;
        [layer setNeedsDisplay];
        [self.view.layer addSublayer:layer];
    

     

    * 还有一种自定义的方式,就是通过设置CALayer的代理完成。主要思路是实例化一个CALayer对象,设置CALayer对象的代理为控制器,在控制器中实现drawLayer:inContext:方法

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	
        CALayer *layer=[CALayer layer];
        layer.bounds=CGRectMake(0, 0, 100, 100);
        layer.position=CGPointMake(150, 150);
        layer.backgroundColor=[UIColor orangeColor].CGColor;
        [layer setNeedsDisplay];
        //设置CALayer的代理
        layer.delegate=self;
        [self.view.layer addSublayer:layer];
        
        self.layer=layer;
    }
    //代理方法drawLayer:中完成图形的绘制
    -(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
        CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 60, 60));
        CGContextSetRGBFillColor(ctx, 0.2, 0.4, 0.5, 1);
        CGContextFillPath(ctx);
    }
    

     显示效果跟上图类似

  • 相关阅读:
    [Python Study Notes]进程信息(丁丁软件监控进程,http-post)
    [Python Study Notes]cpu信息
    [Python Study Notes]电池信息
    [Python Study Notes]内存信息
    [Python Study Notes]磁盘信息和IO性能
    [Python Study Notes]计算cpu使用率v0.1
    [Python Study Notes]计算cpu使用率
    [Python Study Notes]psutil模块
    [解决问题] E: 无法获得锁 /var/lib/dpkg/lock
    [Python Study Notes] python面试题总结
  • 原文地址:https://www.cnblogs.com/luseike/p/3905699.html
Copyright © 2020-2023  润新知