zoukankan      html  css  js  c++  java
  • IOS 自定义Layer(图层)

    方式1:
    
    
    @interface NJViewController ()
    
    @end
    
    @implementation NJViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 如果一个控制是另外一个控件的子控件, 那么这个控件中的layer也是另外一个控件的子layer
    //     NSLog(@"star - %@", self.view.layer.sublayers);
        CALayer *layer = [CALayer layer];
        layer.backgroundColor = [UIColor redColor].CGColor;
        layer.bounds = CGRectMake(0, 0, 100, 100);
    //    layer.position = CGPointMake(200, 200);
    //    layer.contents = (id)[UIImage imageNamed:@"me"].CGImage;
        [self.view.layer addSublayer:layer];
    
        
    }
    
    - (void)test
    {
        
        NSLog(@"star - %@", self.view.layer.sublayers);
        
        // 1.创建layer
        //    CALayer *layer = [[CALayer alloc] init];
        CALayer *layer = [CALayer layer];
        layer.backgroundColor = [UIColor redColor].CGColor;
        layer.bounds = CGRectMake(0, 0, 100, 100);
        layer.position = CGPointMake(200, 200);
        layer.borderWidth = 10;
        layer.cornerRadius = 10;
        // 将layer添加在界面上
        [self.view.layer addSublayer:layer];
        
        //    NSLog(@"%@", layer.superlayer); // 获取layer的父视图
        NSLog(@"end - %@", self.view.layer.sublayers);
        
        
        //
        //    UIView *view = [[UIView alloc] init];
        //    view.superview;
        //    view.subviews;
        //    [self.view addSubview:view];
    }

     方式2:

    NJLayer.h / .m

    @implementation NJLayer
    
    // 重写该方法, 在该方法中给layer上绘制图形
    // 注意CALayer中的drawInContext方法, 不会自动调用
    // 只能自己通过setNeedDisplay方法调用
    - (void)drawInContext:(CGContextRef)ctx
    {
    
        // 1.绘制图形
        CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
        
    //    [[UIColor redColor] set]; // 注意不能用UIKit框架中的类
        
        CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
        // 1.渲染图形
        CGContextFillPath(ctx);
    }
    
    @end
    View Code

    调用

    #import "NJLayer.h"
    
    @interface NJViewController ()
    
    @end
    
    @implementation NJViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        // 1.创建自定义Layer
        CALayer *myLayer = [CALayer layer];
        myLayer.bounds = CGRectMake(0, 0, 100, 100);
        myLayer.anchorPoint = CGPointZero;
        myLayer.backgroundColor = [UIColor greenColor].CGColor;
        
        myLayer.delegate = self;
        
        // 1.1手动调用CALayer中的SETNEEDDISPLAY方法绘制图片
        [myLayer setNeedsDisplay];
        
        // 2.将自定义Layer添加到控制器的view的layer上
        [self.view.layer addSublayer:myLayer];
    }
    
    // 通过代理自定义layer
    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
    {
        
        // 1.绘制图形
        CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 100));
    
        CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
        // 1.渲染图形
        CGContextFillPath(ctx);
    }
    
    
    - (void)test
    {
        // 1.创建自定义Layer
        NJLayer *myLayer = [NJLayer layer];
        
        myLayer.bounds = CGRectMake(0, 0, 100, 100);
        myLayer.anchorPoint = CGPointZero;
        myLayer.backgroundColor = [UIColor greenColor].CGColor;
        //    myLayer.position = CGPointMake(200, 200);
        
        // 1.1手动调用CALayer中的SETNEEDDISPLAY方法绘制图片
        [myLayer setNeedsDisplay];
        
        // 2.将自定义Layer添加到控制器的view的layer上
        [self.view.layer addSublayer:myLayer];
    }
    View Code
  • 相关阅读:
    deepin linux手工更新系统
    redis使用redis-cli查看所有的keys及清空所有的数据
    使用浏览器地址栏调用CXF Webservice的写法
    windows 80端口被占用
    How to install 64-bit Google Chrome 28+ on 64-bit RHEL/CentOS 6 or 7
    CAS 单点登录流程
    Restful是什么,SOAP Webservice和RESTful Webservice
    SpringMVC中的@PathVariable
    VMWare安装苹果操作系统OS X
    eclipse(adt-bundle)的Android SDK Manager下载不了谷歌的东西怎么办?
  • 原文地址:https://www.cnblogs.com/liuwj/p/6599329.html
Copyright © 2011-2022 走看看