iOS动画详解(一)
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低级别、轻量级、高保真度的2D渲染。该框架可以用于基于路径的绘图、变换、颜色管理、脱屏渲染,模板、渐变、
- - (void) drawRect: (CGRect) rect {
-
- UIBezierPath* p = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(,,,)];
-
- [[UIColor blueColor] setFill];
-
- [p fill];
-
- }
第二种绘图形式:使用Core Graphics实现绘制蓝色圆。
- - (void) drawRect: (CGRect) rect {
-
- CGContextRef con = UIGraphicsGetCurrentContext();
-
- CGContextAddEllipseInRect(con, CGRectMake(,,,));
-
- CGContextSetFillColorWithColor(con, [UIColor blueColor].CGColor);
-
- CGContextFillPath(con);
-
- }
第三种绘图形式:我将在UIView子类的drawLayer:inContext:方法中实现绘图任务。drawLayer:inContext:方法是一个绘制图层内容的代理方法。为了能够调用drawLayer:inContext:方法,我们需要设定图层的代理对象。但要注意,不应该将UIView对象设置为显示层的委托对象,这是因为UIView对象已经是隐式层的代理对象,再将它设置为另一个层的委托对象就会出问题。轻量级的做法是:编写负责绘图形的代理类。在MyView.h文件中声明如下代码:
- @interface MyLayerDelegate : NSObject
-
- @end
然后MyView.m文件中实现接口代码:
- @implementation MyLayerDelegate
-
- - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx {
-
- UIGraphicsPushContext(ctx);
-
- UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(,,,)];
-
- [[UIColor blueColor] setFill];
-
- [p fill];
-
- UIGraphicsPopContext();
-
- }
-
- @end
- @interface MyView () {
-
- MyLayerDelegate* _layerDeleagete;
-
- }
-
- @end
- MyView *myView = [[MyView alloc] initWithFrame: CGRectMake(, , , )];
-
- CALayer *myLayer = [CALayer layer];
-
- _layerDelegate = [[MyLayerDelegate alloc] init];
-
- myLayer.delegate = _layerDelegate;
-
- [myView.layer addSublayer:myLayer];
-
- [myView setNeedsDisplay]; // 调用此方法,drawLayer: inContext:方法才会被调用。
第四种绘图形式: 使用Core Graphics在drawLayer:inContext:方法中实现同样操作,代码如下:
- - (void)drawLayer:(CALayer*)lay inContext:(CGContextRef)con {
-
- CGContextAddEllipseInRect(con, CGRectMake(,,,));
-
- CGContextSetFillColorWithColor(con, [UIColor blueColor].CGColor);
-
- CGContextFillPath(con);
-
- }
- UIGraphicsBeginImageContextWithOptions(CGSizeMake(,), NO, );
-
- UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(,,,)];
-
- [[UIColor blueColor] setFill];
-
- [p fill];
-
- UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
-
- UIGraphicsEndImageContext();
- UIGraphicsBeginImageContextWithOptions(CGSizeMake(,), NO, );
-
- CGContextRef con = UIGraphicsGetCurrentContext();
-
- CGContextAddEllipseInRect(con, CGRectMake(,,,));
-
- CGContextSetFillColorWithColor(con, [UIColor blueColor].CGColor);
-
- CGContextFillPath(con);
-
- UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
-
- UIGraphicsEndImageContext();
UIKit和Core Graphics可以在相同的图形上下文中混合使用。在iOS 4.0之前,使用UIKit和UIGraphicsGetCurrentContext被认为是线程不安全的。而在iOS4.0以后苹果让绘图操作在第二个线程中执行解决了此问题。
iOS动画详解(一)的更多相关文章
- iOS动画详解(二)
UIImage常用的绘图操作 一个UIImage对象提供了向当前上下文绘制自身的方法.我们现在已经知道如何获取一个图片类型的上下文并将它转变成当前上下文. 平移操作:下面的代码展示了如何将UI ...
- [转] ReactNative Animated动画详解
http://web.jobbole.com/84962/ 首页 所有文章 JavaScript HTML5 CSS 基础技术 前端职场 工具资源 更多频道▼ - 导航条 - 首页 所有文章 ...
- [转]Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
转载:http://blog.csdn.net/harvic880925/article/details/39996643 前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的 ...
- 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)
转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...
- [转]超级强大的SVG SMIL animation动画详解
超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordp ...
- Android中的动画详解系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...
- IOS SDK详解
来源:http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html?page=1#42803301 博客专栏>移动开发专栏>I ...
- Android Animation动画详解(二): 组合动画特效
前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一 ...
- iOS路由详解
本文如题,路由详解,注定是一篇详细解释iOS路由原理及使用的文章,由于此时正在外地出差,无法详细一一写出,只能不定时的补充. 一.什么是iOS路由 路由一词来源于路由器,可以实现层级之间消息转发的功能 ...
随机推荐
- Zookeeper安装和配置
Zookeeper的安装和配置,可以配置成单机模式.伪集群模式.集群模式. 参考http://coolxing.iteye.com/blog/1871009 一. 单机模式 (1)zookeeper下 ...
- 十个免费的Web压力测试工具
两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...
- 自定义一个compass可编译的目录结构
在学习compass的过程中, 根绝文档说明,如果使用compass create myObject命令会创建一个标准的Compass项目目录结构,如下图: 此时如果使用compass compile ...
- bzoj1433:[ZJOI2009]假期的宿舍
明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...
- ZOJ 2760 How Many Shortest Path (不相交的最短路径个数)
[题意]给定一个N(N<=100)个节点的有向图,求不相交的最短路径个数(两条路径没有公共边). [思路]先用Floyd求出最短路,把最短路上的边加到网络流中,这样就保证了从s->t的一个 ...
- 前端的小Demo——涉及keyCode
以下是我的代码: <!doctype html> <html> <head> <meta charset="utf-8"> < ...
- 20个非常绚丽的 CSS3 特性应用演示
这篇文章收集了20个非常绚丽的 CSS3 效果应用演示,这些示例演示了 CSS3 各种新特性的强大能力.随着越来越多的浏览器对 CSS3 支持的不断完善,设计师和开发者们有了更多的选择,以前需要使用 ...
- TortoiseSVN中分支和合并实践
使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...
- mongo客户端mongo VUE增删改查
一.先创建一张mongo表,右击已创建的数据库test,点击addcollection.. 输入Collection Name,点击ok: 二.在创建的表中新增列与数据,右击表选择Insert doc ...
- WPF学习笔记 - 在XAML里绑定
Binding除了默认构造函数外,还有一个可以传入Path的构造函数,下面两种方式实现的功能是一样的. <TextBlock x:Name="currentFolder" D ...