方式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(, , , );
// 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(, , , );
layer.position = CGPointMake(, );
layer.borderWidth = ;
layer.cornerRadius = ;
// 将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(, , , )); // [[UIColor redColor] set]; // 注意不能用UIKit框架中的类 CGContextSetRGBFillColor(ctx, , , , );
// 1.渲染图形
CGContextFillPath(ctx);
} @end

调用

#import "NJLayer.h"

@interface NJViewController ()

@end

@implementation NJViewController

- (void)viewDidLoad
{
[super viewDidLoad]; // 1.创建自定义Layer
CALayer *myLayer = [CALayer layer];
myLayer.bounds = CGRectMake(, , , );
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(, , , )); CGContextSetRGBFillColor(ctx, , , , );
// 1.渲染图形
CGContextFillPath(ctx);
} - (void)test
{
// 1.创建自定义Layer
NJLayer *myLayer = [NJLayer layer]; myLayer.bounds = CGRectMake(, , , );
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];
}

IOS 自定义Layer(图层)的更多相关文章

  1. iOS 自定义layer的两种方式

    在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIVi ...

  2. iOS开发UI篇—CAlayer(自定义layer)

    iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...

  3. iOS开发UI篇—自定义layer

    一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的DrawRect:方法,然后在该方法中画图. 绘制图形的步骤: ...

  4. iOS - CALayer 绘图层

    1.CALayer 绘图层 在 iOS 系统中,你能看得见摸得着的东西基本上都是 UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是 UIView.其实 UIView 之 ...

  5. [iOS Animation]-CALayer 图层性能

    图层性能 要更快性能,也要做对正确的事情. ——Stephen R. Covey 在第14章『图像IO』讨论如何高效地载入和显示图像,通过视图来避免可能引起动画帧率下降的性能问题.在最后一章,我们将着 ...

  6. iOS 自定义滑动切换TabbarItem 觉得设计丑也要做出来的UI效果。。。

    UI丑却要继续做的感言: 对UI不满意的时候,就会觉得丑爆了,时间长了,却丑习惯了. 论前一阵子Tabbar 多丑,丑得最后不要tabbar了...但是自定义tabbar 和遇到的问题解决的过程可以记 ...

  7. iOS 自定义转场动画浅谈

    代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...

  8. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  9. iOS 关于Layer的疑问

    很久很久以前,就对ios的Layer十分的不解,学习了android后,打算通过android中的相关实现,分析一下ios中layer的作用,结果没有找到android中的对应的内容!十分让人郁闷.于 ...

随机推荐

  1. Spark RDD(Resilient Distributed Dataset)

    基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备.比如Hadoop的MapReduce.        缺点:1.不适合大量的迭代  2. 交互式查询  3. 不能复用曾经的 ...

  2. Mysql-2-数据库基础

    (1)mysql是一个小型关系型数据库管理系统. (2)mysql是一个快速.多线程.多用户.健壮的SQL数据库服务器.与其他数据库管理系统比,mysql有以下的优势: mysql是一个关系数据库管理 ...

  3. idea dao使用@Mapper注解 业务类使用@Autowired 注入dao 爆红问题

    实际项目跑起来无影响,但是看起来不太爽. 可以在dao类添加org.springframework.stereotype.Repository 注解 或者可以在service类中使用 javax.an ...

  4. 手写的select 下拉菜单

    我们在进行表单设计时,可能要用到select下拉选项控件,遗憾的是,IE浏览器默认的select控件外观非常丑陋,而且不能用样式来控制,不能在选项中添加图片等信息.今天我将通过实例来讲解如何用CSS和 ...

  5. Gradle 安装(Windows)

    一.Gradle 简介 1.1 什么是 Gradle?   Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的 项目自动化构建开源工具.它使用一种基于Groovy的D ...

  6. 同域内的两台电脑,一台访问另一台上搭建的IIS站点无法访问解决方法

    需要在搭建IIS站点的机器上,打开[高级安全Windows防火墙],新建[入站规则],添加外部允许访问的端口号即可.

  7. list倒序删除

    public static void main(String[] args) { List<Integer> nums = new ArrayList<Integer>(); ...

  8. applicationContext-datasource.xml

    <?xml version="1.0" encoding="utf-8"?> <beans default-init-method=" ...

  9. python3.6下安装wingIDE破解方法

    1.wingIDE的下载: 在电脑配置好的python环境情况下,去官网下载wingIDE6,按照一般方式安装好.安装好它会自动提示你是否激活,你点击激活.然后到下一步. 2.脚本的制作: impor ...

  10. lecture-7 递归

    1.例题--排列 Permutation Given a collection of distinct numbers, return all possible permutations.For ex ...