`

UIView和CALayer的区别

    博客分类:
  • ios
 
阅读更多

转:http://blog.csdn.net/bsplover/article/details/7928994

如果这篇帖子能够给出每个代码中所带来的页面效果 就更好理解了 以后我自己写之类的介绍可以从中吸取教训

记录园子里的一篇有关CALayer与UIView的关系

CALayer属于Core Animation部分的内容,比较重要而不太好理解。以下是园子中看到的一篇文章的摘录:

1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。

2. UIView有个重要属性layer,可以返回它的主CALayer实例。

// 要访问层,读取UIView实例的layer属性 CALayer *layer = myView.layer

所有从UIView继承来的对象都继承了这个属性。这意味着你可以转换、缩放、旋转,甚至可以在Navigation bars,Tables,Text boxes等其它的View类上增加动画。每个UIView都有一个层,控制着各自的内容最终被显示在屏幕上的方式。
UIView的layerClass方法,可以返回主layer所使用的类,UIView的子类可以通过重载这个方法,来让UIView使用不同的CALayer来显示。代码示例:

- (class)layerClass { return ([CAEAGLLayer class]); }

上述代码使得某个UIView的子类使用GL来进行绘制。

3. UIView的CALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。即CALayer层是可以嵌套的。示例代码:

grayCover = [[CALayer alloc] init]; grayCover.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor]; [self.layer addSubLayer:grayCover];

上述代码会在目标View上敷上一层黑色透明薄膜的效果。

4. UIView的layer树形在系统内部,被维护着三份copy。分别是逻辑树,这里是代码可以操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。

5. 动画的运作:对UIView的subLayer(非主Layer)属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是0.5秒。

6. 坐标系统:CALayer的坐标系统比UIView多了一个anchorPoint属性,使用CGPoint结构表示,值域是0~1,是个比例值。这个点是各种图形变换的坐标原点,同时会更改layer的position的位置,它的缺省值是{0.5,0.5},即在layer的中央。
某layer.anchorPoint = CGPointMake(0.f,0.f);
如果这么设置,只会将layer的左上角被挪到原来的中间位置,必须加上这一句:
某layer.position = CGPointMake(0.f,0.f);

最后:layer可以设置圆角显示(cornerRadius),也可以设置阴影 (shadowColor)。但是如果layer树中某个layer设置了圆角,树种所有layer的阴影效果都将不显示了。因此若是要有圆角又要阴影,变通方法只能做两个重叠的UIView,一个的layer显示圆角,一个layer显示阴影......

7.渲染当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay方法来重绘显示。

[gameLayer setNeedsDisplay];

若要重绘部分屏幕区域,请使用setNeedsDisplayInRect:方法,通过在CGRect结构的区域更新:

[gameLayer setNeedsDisplayInRect:CGRectMake(150.0,100.0,50.0,75.0)];

如果是用的Core Graphics框架来执行渲染的话,可以直接渲染Core Graphics的内容。用renderInContext:来做这个事。

[gameLayer renderInContext:UIGraphicsGetCurrentContext()];

8.变换:要在一个层中添加一个3D或仿射变换,可以分别设置层的transform或affineTransform属性。

characterView.layer.transform = CATransform3DMakeScale(-1.0,-1.0,1.0); CGAffineTransform transform = CGAffineTransformMakeRotation(45.0); backgroundView.layer.affineTransform = transform;

9.变形:Quartz Core的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。CATransform3D的一套方法提供了一些魔术般的变换效果。

分享到:
评论

相关推荐

    CALayer-AutoresizingMask:为 iOS CALayer 添加 UIViewAutoresize 支持和快速 UIView 到 CALayer 的转换方法

    为 iOS CALayer 添加 UIViewAutoresize 支持和快速 UIView 到 CALayer 的转换方法 安装 pod 'CALayer-AutoresizingMask' 用法 不要在这个storyboard或XIB使用自动布局,并使用您需要的自动调整大小蒙版。 热交换...

    motion-animator-objc:Motion Animator根据运动规范创建高性能,可中断的iOS动画

    适用于iOS 9+的动画师,结合了现代UIView和CALayer动画API的最佳方面。 :party_popper: 隐式和显式加性动画。 :party_popper: 通过参数化运动。 :party_popper: 直接从手势识别器为动画提供速度。 :party_popper: ...

    UI相关面试题1

    本文主要讲解了UI相关的面试题,涵盖了UIView和CALayer、事件传递与视图响应链、图像显示原理、UI卡顿掉帧原因、滑动优化方案、UI绘制原理和离屏渲染等知识点。 一、UIView与CALayer UIView和CALayer是iOS UI编程...

    CALayer基本使用

    在UIKit中,UIView和CALayer之间存在对应关系。每个UIView都有一个默认的Layer,通过`layer`属性访问。你可以自定义View的Layer属性,如设置阴影、圆角等,这些改变会影响到与其关联的View。 **8. 性能优化** 由于...

    swift-ZMCALayerAnimationiOS绘图和动画

    5. **UIView与CALayer的关系**:虽然UIView和CALayer有明显的区别,但它们之间有紧密的联系。每个UIView都有一个关联的CALayer,视图的许多属性和方法最终会映射到图层上。通过直接操作图层,可以实现一些在UIView...

    CALayer的基本使用demo

    `CALayer`有很多属性可以控制它的外观和行为,比如`frame`定义了层的位置和大小,`backgroundColor`设置背景颜色,`borderWidth`和`borderColor`用于设置边框宽度和颜色,`contents`可以设置层的内容,如图片或颜色...

    iOS开发中CALayer使用的基本教程

    CALayer是UIView背后的绘图引擎,尽管我们通常与UIView交互,但真正的图形渲染和动画处理都在其对应的CALayer上进行。 **一、CALayer的基本概念** 1. **UIView与CALayer的关系**: - UIView是iOS界面元素的基础,...

    iOS 面试从简单到复杂

    #### 一、UIWindow、UIView与CALayer的关系及区别 1. **UIWindow**:UIWindow是UIView的子类,主要功能包括: - 提供一个区域来显示UIView。 - 将事件(Event)分发给UIView。 - 一般情况下,一个应用程序只有一...

    IOS软件开发ObjectiveCUIView动画和CALayer动画.ppt

    在iOS软件开发中,Objective-C提供了两种主要的动画机制:UIView动画和CALayer动画。这两种动画方式虽然都可以实现丰富的视觉效果,但它们有着不同的特性和使用场景。 首先,让我们了解`UIView`动画。UIView动画是...

    CALayer的使用

    在iOS开发中,CALayer是Core Animation框架的核心组件,它负责在屏幕上绘制和动画化视觉内容。`CALayer`是一个轻量级的对象,用于管理视图的几何形状、内容、透明度以及各种视觉效果。本篇文章将深入探讨`CALayer`的...

    swift-使用UICollectionView来完成所有的视图管理和实现

    CardsAnimationDemo - swift, 《使用 UICollectionView 实现的一个卡片动画》不是直接操作所有 UIView 和 CALayer 的 transform3D 属性来实现整个效果的,而是使用 UICollectionView 来完成所有的视图管理和实现。

    iOS CoreAnimation 图层几何学

    在UIView和CALayer中,都有一些与布局相关的属性,如frame、bounds、center。理解这些属性及其相互关系对于创建动态和复杂的用户界面至关重要。 首先,`frame`属性定义了一个图层的边界,包括其位置(x,y坐标)和...

    ios-自定义CALayer.zip

    在iOS开发中,CALayer是UI层的核心组件,它负责绘制和动画的实现。自定义CALayer能够让我们根据特定需求创建独特的视觉效果。本示例中的"ios-自定义CALayer.zip"是一个教学项目,旨在指导开发者如何通过自定义...

    简单谈谈Core Animation 动画效果

    在开始之前呢,先了解一下UIView和CALayer大体的区别(重点列举了以下四点): •UIView 继承自 UIResponder,因此UIView 可以处理响应事件,而CALayer继承自NSObject,所以它只是负责内容的创建,绘制。 •UIView ...

    iOS开发中CAlayer层的属性以及自定义层的方法

    在iOS开发中,CAlayer是UIKit框架中的核心部分,它是UI视图的基础,负责处理图形渲染和动画。本文将深入探讨CAlayer的两个关键属性:`position`和`anchorPoint`,以及如何利用它们来调整视图的布局和动画效果。同时...

    ios中关于uiview

    每个`UIView`都有一个对应的`CALayer`,负责实际的渲染和动画。Core Animation层对象可以缓存视图的绘制结果,提高性能,并支持复杂的动画效果。 7. **视图层次与子视图管理** - 视图可以包含其他视图,形成层次...

    ios-优雅的实现CALayer的"AutoLayout"的两种方案.zip

    在iOS开发中,我们经常需要对视图进行布局...第一种方法利用了`UIView`的AutoLayout能力,而第二种方法则通过自定义`CALayer`子类直接处理布局逻辑。这两种方法都有其适用场景,开发者可以根据项目需求选择合适的方法。

    IOS应用源码——层的拖动.rar

    虽然UIView包含了CALayer,但开发者可以直接操作CALayer来实现更复杂的动画和渲染效果。 二、拖动实现 1. 触摸事件:在iOS中,我们可以使用UIResponder的触摸事件方法(如touchesBegan:withEvent:,touchesMoved:...

    CALayer 图层处理

    1. 使用`UIResponder`的子类(如`UIView`)作为触控处理者,它们的图层默认关联了`CALayer`。 2. 自定义`UIResponder`子类,并在其中处理触摸事件,然后将其图层设置为`CALayer`的`delegate`。 六、高级特性 1. `...

    ARKitDemo 入门案例

    理解如何使用UIView和CALayer进行布局和动画至关重要。 4. **碰撞检测**:为了让2D元素与现实世界互动,你需要实现碰撞检测,确保虚拟物体只能在平面内移动。 5. **用户交互**:让虚拟元素响应用户的触摸事件,如...

Global site tag (gtag.js) - Google Analytics