IOS 自定义Layer(图层)
@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(图层)的更多相关文章
- iOS 自定义layer的两种方式
在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIVi ...
- iOS开发UI篇—CAlayer(自定义layer)
iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...
- iOS开发UI篇—自定义layer
一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的DrawRect:方法,然后在该方法中画图. 绘制图形的步骤: ...
- iOS - CALayer 绘图层
1.CALayer 绘图层 在 iOS 系统中,你能看得见摸得着的东西基本上都是 UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是 UIView.其实 UIView 之 ...
- [iOS Animation]-CALayer 图层性能
图层性能 要更快性能,也要做对正确的事情. ——Stephen R. Covey 在第14章『图像IO』讨论如何高效地载入和显示图像,通过视图来避免可能引起动画帧率下降的性能问题.在最后一章,我们将着 ...
- iOS 自定义滑动切换TabbarItem 觉得设计丑也要做出来的UI效果。。。
UI丑却要继续做的感言: 对UI不满意的时候,就会觉得丑爆了,时间长了,却丑习惯了. 论前一阵子Tabbar 多丑,丑得最后不要tabbar了...但是自定义tabbar 和遇到的问题解决的过程可以记 ...
- iOS 自定义转场动画浅谈
代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- iOS 关于Layer的疑问
很久很久以前,就对ios的Layer十分的不解,学习了android后,打算通过android中的相关实现,分析一下ios中layer的作用,结果没有找到android中的对应的内容!十分让人郁闷.于 ...
随机推荐
- shell之hello world
[root@localhost sh]#vi hello.sh //编辑 .sh 文件 #The first program #!/bin/bash echo 'hello world' [root@ ...
- python之01电脑和操作系统简史
电脑简史 早期计算方式发展 :手指和石头 ->结绳 ->算筹->计算尺 -> 算盘 19岁时(1642),帕斯卡发明了人类有史以来第一台机械计算机——帕斯卡加法器.它是一种系列 ...
- 20个问题(状压dp)
20个问题(状压dp) 有n(<=128)个物体,m(<=11)个特征.每个物体用一个m位01串表示,表示每个特征是具备还是不具备.我在心里想一个物体,由你来猜.你每次可以询问一个特征,然 ...
- [CodeChef] The Street
给定两个长度为n的数列A和B,开始数组A中每一项值为0,数组B中每一项值为负无穷大.接下来有m次操作:1.数组A区间加一个等差数列:2.数组B区间对一个等差数列取max:3.询问ai+bi的值.n&l ...
- jmeter场景设计实战(一)
需求:2000用户在线,100用户并发访问首页. 和开发沟通了解了具体的需求:2000用户是在线登录状态,这2000用户中要达到100用户并发去访问首页,在这个过程中可能会有停留时间,并不是用户登录之 ...
- Hadoop 2.0完全分布式集群搭建方法(CentOS7+Hadoop 2.7.7)
本文详细介绍搭建4个节点的完全分布式Hadoop集群的方法,Linux系统版本是CentOS 7,Hadoop版本是2.7.7,JDK版本是1.8. 一.准备环境 1. 在VMware worksta ...
- 日志记录:MySQL系列之十一
一.SQL命令历史 ~/.mysql_history 记录了在mysql中执行的命令历史 二.事务日志 transaction log:事务型存储引擎自行管理和使用 在一个事务提交后还没有存到磁盘的情 ...
- Shape Number (最小表示法)
题目链接 一个字符串,这个字符串的首尾是连在一起的,要求寻找一个位置,以该位置为起点的字符串的字典序在所有的字符串中中最小. #include <bits/stdc++.h> using ...
- CentOS6.5安装MySQL5.7(也适合其他版本安装)
1.查看是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步使用yum安装时会报错: 方法一:yum list installed | grep mysql 方法二:rpm -qa | ...
- luogu P5142 区间方差 十分优美的线段树
又来了个维护方差的线段树.... 大致推导过程(字丑多包涵QAQ) 注意取模时要加一些100000007防止出现负数.. #include<cstdio> #include<iost ...