1. /* CoreAnimation - CALayer.h
  2.  
  3. Copyright (c) 2006-2017, Apple Inc.
  4. All rights reserved. */
  5.  
  6. #import <QuartzCore/CAMediaTiming.h>
  7. #import <QuartzCore/CATransform3D.h>
  8. #import <Foundation/NSObject.h>
  9. #import <Foundation/NSNull.h>
  10. #import <Foundation/NSArray.h>
  11. #import <Foundation/NSDictionary.h>
  12.  
  13. @class NSEnumerator, CAAnimation, CALayerArray;
  14. @protocol CAAction, CALayerDelegate;
  15.  
  16. NS_ASSUME_NONNULL_BEGIN
  17.  
  18. /* Bit definitions for `edgeAntialiasingMask' property. */
  19.  
  20. typedef NS_OPTIONS (unsigned int, CAEdgeAntialiasingMask)
  21. {
  22. kCALayerLeftEdge = 1U << , /* Minimum X edge. */
  23. kCALayerRightEdge = 1U << , /* Maximum X edge. */
  24. kCALayerBottomEdge = 1U << , /* Minimum Y edge. */
  25. kCALayerTopEdge = 1U << , /* Maximum Y edge. */
  26. };
  27.  
  28. /* Bit definitions for `maskedCorners' property. */
  29.  
  30. typedef NS_OPTIONS (NSUInteger,
  31. )
  32. {
  33. kCALayerMinXMinYCorner = 1U << ,
  34. kCALayerMaxXMinYCorner = 1U << ,
  35. kCALayerMinXMaxYCorner = 1U << ,
  36. kCALayerMaxXMaxYCorner = 1U << ,
  37. };
  38.  
  39. /** The base layer class. **/
  40.  
  41. CA_CLASS_AVAILABLE (10.5, 2.0, 9.0, 2.0)
  42. @interface CALayer : NSObject <NSSecureCoding, CAMediaTiming>
  43. {
  44. @private
  45. struct _CALayerIvars {
  46. int32_t refcount;
  47. uint32_t magic;
  48. void *layer;
  49. #if TARGET_OS_MAC && !TARGET_RT_64_BIT
  50. void * _Nonnull unused1[];
  51. #endif
  52. } _attr;
  53. }
  54.  
  55. /** Layer creation and initialization. **/
  56. //初始化方法
  57. + (instancetype)layer;
  58. - (instancetype)init;
  59. - (instancetype)initWithLayer:(id)layer;
  60.  
  61. //presentationLayer是通过modelLayer提供属性进行绘制的
  62. //呈现层 用于显示动画
  63. - (nullable instancetype)presentationLayer;
  64.  
  65. //模型层 设置的layer属性就是在这个层
  66. - (instancetype)modelLayer;
  67.  
  68. /** Property methods. **/
  69.  
  70. //重写修改CALayer或其子类的默认值 ,key为属性名称,如果没有该属性返回nil
  71. + (nullable id)defaultValueForKey:(NSString *)key;
  72.  
  73. //需要子类重写,当CALayer或其子类属性被修改时调用此方法
  74. //key为修改的属性名,返回YES是系统自动调用-display方法
  75. + (BOOL)needsDisplayForKey:(NSString *)key;
  76.  
  77. //指示指定键的值是否应该归档。
  78. - (BOOL)shouldArchiveValueForKey:(NSString *)key;
  79.  
  80. //layer的大小
  81. @property CGRect bounds;
  82.  
  83. //设置CALayer在父层中的位置
  84. @property CGPoint position;
  85.  
  86. //z方向的位置
  87. @property CGFloat zPosition;
  88.  
  89. //平面上的锚点(0-1),决定layer身上的哪个点在position的位置上
  90. @property CGPoint anchorPoint;
  91.  
  92. //z方向上的锚点
  93. @property CGFloat anchorPointZ;
  94.  
  95. //矩阵 仿射变换
  96. @property CATransform3D transform;
  97.  
  98. //返回和设置仿射变换值
  99. - (CGAffineTransform)affineTransform;
  100. - (void)setAffineTransform:(CGAffineTransform)m;
  101.  
  102. //设置layer的坐标
  103. @property CGRect frame;
  104.  
  105. //是否隐藏
  106. @property(getter=isHidden) BOOL hidden;
  107.  
  108. //设置layer的背面是否被绘制,默认是YES,NO时当图层从相机视角消失是将不会被绘制。
  109. @property(getter=isDoubleSided) BOOL doubleSided;
  110.  
  111. //默认为NO,设置为YES所有子图层相对于左上角的位置改为相对于左下角位置
  112. @property(getter=isGeometryFlipped) BOOL geometryFlipped;
  113.  
  114. //获取当前layer内容在Y轴方向是否被翻转了
  115. - (BOOL)contentsAreFlipped;
  116.  
  117. //获取父层layer
  118. @property(nullable, readonly) CALayer *superlayer;
  119.  
  120. //从父层layer上移除
  121. - (void)removeFromSuperlayer;
  122.  
  123. //获取所有子layer数组
  124. @property(nullable, copy) NSArray<CALayer *> *sublayers;
  125.  
  126. //将layer添加到父视图
  127. - (void)addSublayer:(CALayer *)layer;
  128.  
  129. //插入一个layer
  130. - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;
  131. - (void)insertSublayer:(CALayer *)layer below:(nullable CALayer *)sibling;
  132. - (void)insertSublayer:(CALayer *)layer above:(nullable CALayer *)sibling;
  133.  
  134. //用layer2替换layer
  135. - (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2;
  136.  
  137. //对子layer进行3D变换
  138. @property CATransform3D sublayerTransform;
  139.  
  140. //图层蒙版layer
  141. @property(nullable, strong) CALayer *mask;
  142.  
  143. //是否进行bounds切割,通常设置圆角时使用
  144. @property BOOL masksToBounds;
  145.  
  146. /** Mapping between layer coordinate and time spaces. **/
  147. //转换坐标点、矩形
  148. - (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable CALayer *)l;
  149. - (CGPoint)convertPoint:(CGPoint)p toLayer:(nullable CALayer *)l;
  150. - (CGRect)convertRect:(CGRect)r fromLayer:(nullable CALayer *)l;
  151. - (CGRect)convertRect:(CGRect)r toLayer:(nullable CALayer *)l;
  152. //转换CAMediaTiming协议的相对时间
  153. - (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(nullable CALayer *)l;
  154. - (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(nullable CALayer *)l;
  155.  
  156. /** Hit testing methods. **/
  157.  
  158. //返回包含某一点的最上层的子layer
  159. - (nullable CALayer *)hitTest:(CGPoint)p;
  160.  
  161. //判断layer是否包含某一点
  162. - (BOOL)containsPoint:(CGPoint)p;
  163.  
  164. /** Layer content properties and methods. **/
  165.  
  166. //设置layer的内容 ,一般设置CGImage的对象
  167. @property(nullable, strong) id contents;
  168.  
  169. //获取内容的rect尺寸
  170. @property CGRect contentsRect;
  171.  
  172. //设置内容对齐和填充方式(枚举)
  173. @property(copy) NSString *contentsGravity;
  174.  
  175. //设置内容的缩放
  176. @property CGFloat contentsScale
  177. CA_AVAILABLE_STARTING (10.7, 4.0, 9.0, 2.0);
  178.  
  179. //设置一个矩形变形区域默认(0,0,1,1)取值0-1
  180. @property CGRect contentsCenter;
  181.  
  182. //设置内容存储格式
  183. @property(copy) NSString *contentsFormat
  184. CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
  185.  
  186. //设置缩小和放大模式
  187. @property(copy) NSString *minificationFilter;
  188. @property(copy) NSString *magnificationFilter;
  189.  
  190. //缩放因子
  191. @property float minificationFilterBias;
  192.  
  193. //设置内容完全不透明 默认NO
  194. @property(getter=isOpaque) BOOL opaque;
  195.  
  196. //重新加载绘制内容
  197. - (void)display;
  198.  
  199. // 设置内容或某一区域内容加载
  200. - (void)setNeedsDisplay;
  201. - (void)setNeedsDisplayInRect:(CGRect)r;
  202.  
  203. //获取是否需要重新绘制
  204. - (BOOL)needsDisplay;
  205.  
  206. //如果需要进行内容重新绘制
  207. - (void)displayIfNeeded;
  208.  
  209. //设置为YES 内容改变后自动调用 - (void)setNeedsDisplay;方法
  210. @property BOOL needsDisplayOnBoundsChange;
  211.  
  212. //延迟绘制命令,用于需要频繁重绘的视图
  213. @property BOOL drawsAsynchronously
  214. CA_AVAILABLE_STARTING (10.8, 6.0, 9.0, 2.0);
  215.  
  216. //绘制内容
  217. - (void)drawInContext:(CGContextRef)ctx;
  218.  
  219. /** Rendering properties and methods. **/
  220.  
  221. //读取内容
  222. - (void)renderInContext:(CGContextRef)ctx;
  223.  
  224. //用于限定层的边缘如何栅格化,默认是抗锯齿
  225. @property CAEdgeAntialiasingMask edgeAntialiasingMask;
  226.  
  227. //YES时,要求edgeAntialiasingMask属性边抗锯齿,默认值是从Info.plist中UIViewEdgeAntialiasing属性获取,如果没有值默认NO
  228. @property BOOL allowsEdgeAntialiasing;
  229.  
  230. //设置layer背景色
  231. @property(nullable) CGColorRef backgroundColor;
  232.  
  233. //设置layer圆角半径
  234. @property CGFloat cornerRadius;
  235.  
  236. //设置layer哪几个角显示圆角 支持动画
  237. @property CACornerMask maskedCorners
  238. CA_AVAILABLE_STARTING (10.13, 11.0, 11.0, 4.0);
  239.  
  240. //设置边框宽度
  241. @property CGFloat borderWidth;
  242.  
  243. //设置边框颜色
  244. @property(nullable) CGColorRef borderColor;
  245.  
  246. //设置透明度
  247. @property float opacity;
  248.  
  249. //默认YES(iOS7之后)子layer最高透明度上限是父layer的透明度,NO各自控制
  250. @property BOOL allowsGroupOpacity;
  251.  
  252. //一个coreImage过滤器 用于合成图层及其后面内容 可动画
  253. @property(nullable, strong) id compositingFilter;
  254.  
  255. //应用于图层和其子图层内容的coreImage过滤器数组
  256. @property(nullable, copy) NSArray *filters;
  257.  
  258. //应用于图层后面的内容的coreImage过滤器数组 可动画
  259. @property(nullable, copy) NSArray *backgroundFilters;
  260.  
  261. //光栅化
  262. @property BOOL shouldRasterize;
  263.  
  264. //当shouldRasterize设置为YES是,也就是光栅化之后 设置此属性防止retina屏幕像素化(默认值1)
  265. @property CGFloat rasterizationScale;
  266.  
  267. /** Shadow properties. **/
  268.  
  269. //阴影颜色 可动画
  270. @property(nullable) CGColorRef shadowColor;
  271.  
  272. //阴影透明度 可动画
  273. @property float shadowOpacity;
  274.  
  275. //阴影偏移量 可动画
  276. @property CGSize shadowOffset;
  277.  
  278. //阴影圆角半径 可动画
  279. @property CGFloat shadowRadius;
  280.  
  281. //阴影路径 可动画
  282. @property(nullable) CGPathRef shadowPath;
  283.  
  284. /** Layout methods. **/
  285.  
  286. //返回图层在其父图层的坐标空间中的首选大小
  287. - (CGSize)preferredFrameSize;
  288.  
  289. //使图层无效,标记需要更新
  290. - (void)setNeedsLayout;
  291.  
  292. //返回是否需要布局更新标志
  293. - (BOOL)needsLayout;
  294.  
  295. //如果需要,重新计算布局
  296. - (void)layoutIfNeeded;
  297.  
  298. //重新布局所有子layer
  299. - (void)layoutSublayers;
  300.  
  301. /** Action methods. **/
  302.  
  303. //返回当前类的默认操作
  304. + (nullable id<CAAction>)defaultActionForKey:(NSString *)event;
  305.  
  306. //返回分配给指定键的动作对象
  307. - (nullable id<CAAction>)actionForKey:(NSString *)event;
  308.  
  309. //包含图层动作的字典
  310. @property(nullable, copy) NSDictionary<NSString *, id<CAAction>> *actions;
  311.  
  312. /** Animation methods. **/
  313.  
  314. //给layer渲染树添加指定动画对象
  315. - (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key;
  316.  
  317. //移除所有动画对象
  318. - (void)removeAllAnimations;
  319.  
  320. //移除指定动画对象
  321. - (void)removeAnimationForKey:(NSString *)key;
  322.  
  323. //返回字符串数组,标记当前layer附加的所有动画
  324. - (nullable NSArray<NSString *> *)animationKeys;
  325.  
  326. //通过指定的标识返回一个动画对象
  327. - (nullable CAAnimation *)animationForKey:(NSString *)key;
  328.  
  329. /** Miscellaneous properties. **/
  330.  
  331. //图层标识
  332. @property(nullable, copy) NSString *name;
  333.  
  334. //代理
  335. @property(nullable, weak) id <CALayerDelegate> delegate;
  336.  
  337. //一个用于存储未由图层显示定义的属性值的可选字典
  338. @property(nullable, copy) NSDictionary *style;
  339.  
  340. @end
  341.  
  342. /** Action (event handler) protocol. **/
  343.  
  344. @protocol CAAction
  345.  
  346. //CAAction协议方法(action对象 隐式动画)
  347. - (void)runActionForKey:(NSString *)event object:(id)anObject
  348. arguments:(nullable NSDictionary *)dict;
  349.  
  350. @end
  351.  
  352. /** NSNull protocol conformance. **/
  353.  
  354. @interface NSNull (CAActionAdditions) <CAAction>
  355.  
  356. @end
  357.  
  358. /** Delegate methods. **/
  359.  
  360. @protocol CALayerDelegate <NSObject>
  361. @optional
  362.  
  363. //更新图层时回调
  364. - (void)displayLayer:(CALayer *)layer;
  365.  
  366. //绘制图层时回调
  367. - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
  368.  
  369. //图层将要绘制是回调
  370. - (void)layerWillDraw:(CALayer *)layer
  371. CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
  372.  
  373. //子layer布局时回调
  374. - (void)layoutSublayersOfLayer:(CALayer *)layer;
  375.  
  376. //执行指定操作时回调
  377. - (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
  378.  
  379. @end
  380.  
  381. /** Layer `contentsGravity' values. **/
  382.  
  383. CA_EXTERN NSString * const kCAGravityCenter
  384. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  385. CA_EXTERN NSString * const kCAGravityTop
  386. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  387. CA_EXTERN NSString * const kCAGravityBottom
  388. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  389. CA_EXTERN NSString * const kCAGravityLeft
  390. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  391. CA_EXTERN NSString * const kCAGravityRight
  392. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  393. CA_EXTERN NSString * const kCAGravityTopLeft
  394. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  395. CA_EXTERN NSString * const kCAGravityTopRight
  396. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  397. CA_EXTERN NSString * const kCAGravityBottomLeft
  398. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  399. CA_EXTERN NSString * const kCAGravityBottomRight
  400. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  401. CA_EXTERN NSString * const kCAGravityResize
  402. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  403. CA_EXTERN NSString * const kCAGravityResizeAspect
  404. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  405. CA_EXTERN NSString * const kCAGravityResizeAspectFill
  406. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  407.  
  408. /** Layer `contentsFormat` values. **/
  409.  
  410. CA_EXTERN NSString * const kCAContentsFormatRGBA8Uint /* RGBA UInt8 per component */
  411. CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
  412. CA_EXTERN NSString * const kCAContentsFormatRGBA16Float /* RGBA half-float 16-bit per component */
  413. CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
  414. CA_EXTERN NSString * const kCAContentsFormatGray8Uint /* Grayscale with alpha (if not opaque) UInt8 per component */
  415. CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
  416.  
  417. /** Contents filter names. **/
  418.  
  419. CA_EXTERN NSString * const kCAFilterNearest
  420. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  421. CA_EXTERN NSString * const kCAFilterLinear
  422. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  423.  
  424. /* Trilinear minification filter. Enables mipmap generation. Some
  425. * renderers may ignore this, or impose additional restrictions, such
  426. * as source images requiring power-of-two dimensions. */
  427.  
  428. CA_EXTERN NSString * const kCAFilterTrilinear
  429. CA_AVAILABLE_STARTING (10.6, 3.0, 9.0, 2.0);
  430.  
  431. /** Layer event names. **/
  432.  
  433. CA_EXTERN NSString * const kCAOnOrderIn
  434. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  435. CA_EXTERN NSString * const kCAOnOrderOut
  436. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  437.  
  438. /** The animation key used for transitions. **/
  439.  
  440. CA_EXTERN NSString * const kCATransition
  441. CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
  442.  
  443. NS_ASSUME_NONNULL_END

iOS之CALayer属性简介的更多相关文章

  1. iOS之CAGradientLayer属性简介和使用

    1.CAGradientLayer简介 CAGradientLayer用于制作背景图层的颜色渐变,也就是颜色梯度!相关属性简介: #import <QuartzCore/CALayer.h> ...

  2. iOS之CAScrollLayer属性简介和使用

    1.CAScrollLayer的简介 CAScrollLayer用于显示一个滑动图层的一部分,可以确定滑动方向和可视区域面积,限制不滑出区域外!相关属性如下:其中 /* Scroll the cont ...

  3. iOS之CAReplicatorLayer属性简介和使用

    1.CAReplicatorLayer简介 CAReplicatorLayer用于对图层进行复制,包括图层的动画也能复制!可以看着将某一段事务进行重复! #import <QuartzCore/ ...

  4. iOS之CATextLayer属性简介

    1.CATextLayer简介 CATextLayer快速高效简单地来渲染纯文本.NSAttributedString /* The text layer provides simple text l ...

  5. iOS之CAShapeLayer属性简介

    1.CAShapeLayer需要和贝塞尔曲线一块使用! #import <QuartzCore/CALayer.h> NS_ASSUME_NONNULL_BEGIN CA_CLASS_AV ...

  6. iOS基础 - CALayer

    一.CALayer简介 Core Animation是跨平台的,支持iOS环境和Mac OS X环境 凡是支持跨平台的框架,都不能直接使用UIKit框架,因为UIKit框架只能应用在iOS而不能用于M ...

  7. [iOS Animation]-CALayer 视觉效果

    视觉效果 嗯,圆和椭圆还不错,但如果是带圆角的矩形呢? 我们现在能做到那样了么? 史蒂芬·乔布斯 我们在第三章『图层几何学』中讨论了图层的frame,第二章『寄宿图』则讨论了图层的寄宿图.但是图层不仅 ...

  8. [转]IOS UIView 之属性篇

    [转载自:IOS UIView 之属性篇 From CSDN] UIView 继承于UIResponder             所遵守的协议有 NSCoding .UIAppearance. UI ...

  9. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

随机推荐

  1. 005-Java运算符

    1.  求余符号,余数的符号是和被除数保持一致的. 2. 自增自减运算符不改变变量的数据类型. 逻辑运算符 逻辑与:& 逻辑或:| 逻辑非:! 短路与:&& 短路或:|| 逻辑 ...

  2. GenericServlet简介和使用

    GenericServlet:抽象类 是Servlet接口的抽象类,为Servlet接口中的一些方法做了空实现,只将service()方法作为抽象方法 Servlet代码实现GenericServle ...

  3. java——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    package java_day10; /* * 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? */ public class Demo04 { public stat ...

  4. leetcode-11-盛水最多的容器

    题目描述: 方法一:双指针 class Solution: def maxArea(self, height: List[int]) -> int: left = 0 right = len(h ...

  5. java中的break continue

    break语句 在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) public class B ...

  6. TopCoder[SRM513 DIV 1]:PerfectMemory(500)

    Problem Statement      You might have played the game called Memoria. In this game, there is a board ...

  7. Sublime Text 3,有了Anaconda就会如虎添翼

    作为Python开发环境的Sublime Text 3,有了Anaconda就会如虎添翼.Anaconda是目前最流行也是最有威力的Python代码提示插件. 操作步骤 1.打开package con ...

  8. Pycharm中如何加载多个项目同时存在

    原文地址: http://www.cnblogs.com/mrgavin/p/6382406.html 今天在使用Pycharm工具练习Python时遇到一个疑问:在已存有项目A工程的前提下如何新建另 ...

  9. ssm下使用分页插件PageHelper进行分页

    1. 导入maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...

  10. Vue .sync修饰符与$emit(update:xxx)写法问题

    在学习vue自定义事件的.sync修饰符实现改变数值时发现一个问题如下由于props的大小写命名:fatherNum,对应不同的$emit()会有不同的效果,具体如下: 使用.sync修饰符,即 // ...