- 浏览: 624012 次
文章分类
最新评论
-
q781253433:
qin ~.求demo看看~
Android之Widget -
zhongyuanceshi:
博主,没看到你的例子的Demo,共享下
Android之Widget
转:http://blog.csdn.net/bsplover/article/details/7928994
如果这篇帖子能够给出每个代码中所带来的页面效果 就更好理解了 以后我自己写之类的介绍可以从中吸取教训
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的一套方法提供了一些魔术般的变换效果。
发表评论
-
tableview FPS 优化
2016-06-28 11:26 1现状: 在滚动tableview ... -
iOS 开发者中的公司账号与个人账号之间有什么区别?
2016-06-23 14:54 500原文:http://www.zhihu.com/questio ... -
strong weak copy
2016-04-24 21:01 629copy的使用 如果是mutable,则co ... -
App性能优化思考
2015-10-13 15:24 906一个app的数据 启动时间 crash率 每个 ... -
iOS之手势操作
2015-01-19 10:24 780手势学习: https://developer. ... -
iOS之网络学习
2015-01-19 10:23 641网络学习: http://nshipster.c ... -
nib文件的加载过程
2014-10-24 13:39 792参考:http://blog.csdn.net/nokiax ... -
NSCoder&&NSCoding使用
2014-10-24 11:38 756NScoder和NScoding的作用是将自定义的类的对象持 ... -
Autolayout学习
2014-10-20 16:32 744参考: http://my.oschina. ... -
IOS开发屏幕适配总结
2014-10-20 16:28 447面对4个分辨率的iPhone,建议使用Auto Layou ... -
Size Classes学习
2014-10-20 16:27 763Size Classes介绍:http://blog.su ... -
iPhone6分辨率以及适配
2014-10-20 11:36 1307对iPhone6适配的两种方式:1、兼容模式 这种模式 ... -
Core Animation简介
2014-10-19 15:33 778在iOS中,整个view都是直接构建在Core Animat ... -
Charles使用——HTTP代理服务器
2014-10-19 15:32 2054* HTTP代理服务器,监听8888端口 * HTTP监视 ... -
《精选》开发中遇到的问题总结
2014-10-19 15:31 10081、新浪微博的使用 使用的事umeng的SDK来调用微信、 ... -
使用JavaScript给UIWebView中的内容注入CSS
2014-10-06 21:26 1156NSString *filePath = [[NSB ... -
UIViewde的属性edgesForExtendedLayout
2014-09-26 17:56 692edgesForExtendedLayout 指定边缘 ... -
UIView的属性autoresizingMask
2014-09-26 17:36 764在 UIView 中有一个autoresizingMask ... -
UIWebView获取内容的高度
2014-09-24 13:13 744// 第一种方法 ... -
storyboard的总结
2014-09-02 11:30 733两个基本概念 scene 就是一个视图控制器 se ...
相关推荐
为 iOS CALayer 添加 UIViewAutoresize 支持和快速 UIView 到 CALayer 的转换方法 安装 pod 'CALayer-AutoresizingMask' 用法 不要在这个storyboard或XIB使用自动布局,并使用您需要的自动调整大小蒙版。 热交换...
适用于iOS 9+的动画师,结合了现代UIView和CALayer动画API的最佳方面。 :party_popper: 隐式和显式加性动画。 :party_popper: 通过参数化运动。 :party_popper: 直接从手势识别器为动画提供速度。 :party_popper: ...
本文主要讲解了UI相关的面试题,涵盖了UIView和CALayer、事件传递与视图响应链、图像显示原理、UI卡顿掉帧原因、滑动优化方案、UI绘制原理和离屏渲染等知识点。 一、UIView与CALayer UIView和CALayer是iOS UI编程...
在UIKit中,UIView和CALayer之间存在对应关系。每个UIView都有一个默认的Layer,通过`layer`属性访问。你可以自定义View的Layer属性,如设置阴影、圆角等,这些改变会影响到与其关联的View。 **8. 性能优化** 由于...
5. **UIView与CALayer的关系**:虽然UIView和CALayer有明显的区别,但它们之间有紧密的联系。每个UIView都有一个关联的CALayer,视图的许多属性和方法最终会映射到图层上。通过直接操作图层,可以实现一些在UIView...
`CALayer`有很多属性可以控制它的外观和行为,比如`frame`定义了层的位置和大小,`backgroundColor`设置背景颜色,`borderWidth`和`borderColor`用于设置边框宽度和颜色,`contents`可以设置层的内容,如图片或颜色...
CALayer是UIView背后的绘图引擎,尽管我们通常与UIView交互,但真正的图形渲染和动画处理都在其对应的CALayer上进行。 **一、CALayer的基本概念** 1. **UIView与CALayer的关系**: - UIView是iOS界面元素的基础,...
#### 一、UIWindow、UIView与CALayer的关系及区别 1. **UIWindow**:UIWindow是UIView的子类,主要功能包括: - 提供一个区域来显示UIView。 - 将事件(Event)分发给UIView。 - 一般情况下,一个应用程序只有一...
在iOS软件开发中,Objective-C提供了两种主要的动画机制:UIView动画和CALayer动画。这两种动画方式虽然都可以实现丰富的视觉效果,但它们有着不同的特性和使用场景。 首先,让我们了解`UIView`动画。UIView动画是...
在iOS开发中,CALayer是Core Animation框架的核心组件,它负责在屏幕上绘制和动画化视觉内容。`CALayer`是一个轻量级的对象,用于管理视图的几何形状、内容、透明度以及各种视觉效果。本篇文章将深入探讨`CALayer`的...
CardsAnimationDemo - swift, 《使用 UICollectionView 实现的一个卡片动画》不是直接操作所有 UIView 和 CALayer 的 transform3D 属性来实现整个效果的,而是使用 UICollectionView 来完成所有的视图管理和实现。
在UIView和CALayer中,都有一些与布局相关的属性,如frame、bounds、center。理解这些属性及其相互关系对于创建动态和复杂的用户界面至关重要。 首先,`frame`属性定义了一个图层的边界,包括其位置(x,y坐标)和...
在iOS开发中,CALayer是UI层的核心组件,它负责绘制和动画的实现。自定义CALayer能够让我们根据特定需求创建独特的视觉效果。本示例中的"ios-自定义CALayer.zip"是一个教学项目,旨在指导开发者如何通过自定义...
在开始之前呢,先了解一下UIView和CALayer大体的区别(重点列举了以下四点): •UIView 继承自 UIResponder,因此UIView 可以处理响应事件,而CALayer继承自NSObject,所以它只是负责内容的创建,绘制。 •UIView ...
在iOS开发中,CAlayer是UIKit框架中的核心部分,它是UI视图的基础,负责处理图形渲染和动画。本文将深入探讨CAlayer的两个关键属性:`position`和`anchorPoint`,以及如何利用它们来调整视图的布局和动画效果。同时...
每个`UIView`都有一个对应的`CALayer`,负责实际的渲染和动画。Core Animation层对象可以缓存视图的绘制结果,提高性能,并支持复杂的动画效果。 7. **视图层次与子视图管理** - 视图可以包含其他视图,形成层次...
在iOS开发中,我们经常需要对视图进行布局...第一种方法利用了`UIView`的AutoLayout能力,而第二种方法则通过自定义`CALayer`子类直接处理布局逻辑。这两种方法都有其适用场景,开发者可以根据项目需求选择合适的方法。
虽然UIView包含了CALayer,但开发者可以直接操作CALayer来实现更复杂的动画和渲染效果。 二、拖动实现 1. 触摸事件:在iOS中,我们可以使用UIResponder的触摸事件方法(如touchesBegan:withEvent:,touchesMoved:...
1. 使用`UIResponder`的子类(如`UIView`)作为触控处理者,它们的图层默认关联了`CALayer`。 2. 自定义`UIResponder`子类,并在其中处理触摸事件,然后将其图层设置为`CALayer`的`delegate`。 六、高级特性 1. `...
理解如何使用UIView和CALayer进行布局和动画至关重要。 4. **碰撞检测**:为了让2D元素与现实世界互动,你需要实现碰撞检测,确保虚拟物体只能在平面内移动。 5. **用户交互**:让虚拟元素响应用户的触摸事件,如...