iOS开发UI篇—Quartz2D简单使用(三)
iOS开发UI篇—Quartz2D简单使用(三)
一、通过slider控制圆的缩放
1.实现过程
新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联。
界面搭建,如图:
代码示例:
YYViewController.m文件
- //
- // YYViewController.m
- // 04-对圆进行缩放
- //
- // Created by apple on 14-6-11.
- // Copyright (c) 2014年 itcase. All rights reserved.
- //
- #import "YYViewController.h"
- #import "YYview.h"
- @interface YYViewController ()
- @property (weak, nonatomic) IBOutlet YYview *circleView;
- - (IBAction)valueChange:(UISlider *)sender;
- @end
- @implementation YYViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- }
- - (IBAction)valueChange:(UISlider *)sender {
- //当值改变的时候,把值传递给view,改变圆的半径
- NSLog(@"%f",sender.value);
- //把sender的值传递给自定义view,设置圆的半径
- self.circleView.radius=sender.value;
- }
- @end
YYview.h文件
- //
- // YYview.h
- // 04-对圆进行缩放
- //
- // Created by apple on 14-6-11.
- // Copyright (c) 2014年 itcase. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- @interface YYview : UIView
- //提供一个属性来接收外界传入的半径
- @property(nonatomic,assign)float radius;
- @end
YYview.m文件
- //
- // YYview.m
- // 04-对圆进行缩放
- //
- // Created by apple on 14-6-11.
- // Copyright (c) 2014年 itcase. All rights reserved.
- //
- #import "YYview.h"
- @implementation YYview
- //自定义view中的圆不显示
- //重写set方法,为半径赋值
- -(void)setRadius:(float)radius
- {
- _radius=radius;
- //通知自定义的view重新绘制图形
- [self setNeedsDisplay];
- }
- //如果view是从xib或storyboard中创建出来的会先调用awakefromnib方法
- - (void)awakeFromNib
- {
- //在这里为圆的半径设定一个初始的值
- self.radius = ;
- }
- - (void)drawRect:(CGRect)rect
- {
- //1.获取图形上下文
- CGContextRef ctx=UIGraphicsGetCurrentContext();
- //2.绘图
- //在自定义的view中画一个圆
- CGContextAddArc(ctx, , , self.radius, , *M_PI, );
- //设置圆的填充颜色
- [[UIColor grayColor]set];
- //3.渲染
- // CGContextStrokePath(ctx);
- CGContextFillPath(ctx);
- }
- @end
效果:
2.注意点:

- //
- // YYview.m
- // 05-刷帧动画
- //
- // Created by apple on 14-6-11.
- // Copyright (c) 2014年 itcase. All rights reserved.
- //
- #import "YYview.h"
- //私有扩展
- @interface YYview ()
- @property(nonatomic,assign)float imageY;
- @end
- @implementation YYview
- -(id)initWithCoder:(NSCoder *)aDecoder
- {
- //请注意这里一定要先初始化父类的构造方法
- if (self=[super initWithCoder:aDecoder]) {
- NSLog(@"initWithCoder:");
- //NSTimer一般用于定时的更新一些非界面上的数据,告诉多久调用一次
- //使用定时器,使用该定时器会出现卡顿的现象
- // [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];
- // CADisplayLink刷帧,默认每秒刷新60次
- //该定时器创建之后,默认是不会执行的,需要把它加载到消息循环中
- CADisplayLink *display= [CADisplayLink displayLinkWithTarget:self selector:@selector(updateImage)];
- [display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
- }
- return self;
- }
- -(void)updateImage
- {
- //调用该方法重绘画面
- [self setNeedsDisplay];
- }
- -(void)awakeFromNib
- {
- NSLog(@"awakeFromNib");
- }
- - (void)drawRect:(CGRect)rect
- {
- //把图片绘制到view上
- //每次调用该方法对画面进行重绘时,imageY的值就+5
- self.imageY+=;
- //判断,当雪花超出屏幕的时候,让图片从头开始降落
- if (self.imageY>rect.size.height) {
- self.imageY=;
- }
- UIImage *image=[UIImage imageNamed:@"snow"];
- [image drawAtPoint:CGPointMake(, self.imageY)];
- UIImage *image2=[UIImage imageNamed:@"me"];
- [image2 drawAtPoint:CGPointMake(, self.imageY)];
- }
- @end
实现效果
2.重要说明
(1)下面两个方法的调用顺序
-(void)awakeFromNib
-(id)initWithCoder:(NSCoder *)aDecoder
提示:如果view是从xib或storyboard中创建可以调用awakefromnib方法,归档。从文件创建view,其实会先调用initwithcoder这个方法。xib和storyboard也是文件。
上面两个方法,-(id)initWithCoder:(NSCoder *)aDecoder会先调用。实现该方法需要实现NSCoding协议,由于创建的UIView默认就已经实现了该协议。
可以进入到头文件查看:
运行新建的程序,通过打印可以验证上面两个方法的调用顺序。
(2)两个定时器
第一个:
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];
说明: NSTimer一般用于定时的更新一些非界面上的数据,告诉多久调用一次
第二个:
CADisplayLink *display= [CADisplayLink displayLinkWithTarget:self selector:@selector(updateImage)];
[display addToRunLoop:[NSRunLoopmainRunLoop] forMode:NSDefaultRunLoopMode];
说明: CADisplayLink刷帧,默认每秒刷新60次。该定时器创建之后,默认是不会执行的,需要把它加载到消息循环中
iOS开发UI篇—Quartz2D简单使用(三)的更多相关文章
- iOS开发UI篇—Quartz2D简单介绍
iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...
- iOS开发UI篇—Quartz2D简单使用(一)
iOS开发UI篇—Quartz2D简单使用(一) 一.画直线 代码: // // YYlineview.m // 03-画直线 // // Created by apple on 14-6-9. // ...
- iOS开发UI篇—Quartz2D简单使用(一)
iOS开发UI篇—Quartz2D简单使用(一) 一.画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on ...
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- iOS开发UI篇—Quartz2D使用(绘制基本图形)
iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...
- iOS开发UI篇—Quartz2D使用(图形上下文栈)
iOS开发UI篇—Quartz2D使用(图形上下文栈) 一.qurza2d是怎么将绘图信息和绘图的属性绘制到图形上下文中去的? 说明: 新建一个项目,自定义一个view类和storyboard关联后, ...
- iOS开发UI篇—Quartz2D使用(绘图路径)
iOS开发UI篇—Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径 cgmutablepat ...
- iOS开发UI篇—Quartz2D使用(信纸条纹)
iOS开发UI篇—Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. #import "YYViewContr ...
- iOS开发UI篇—Quartz2D使用(截屏)
iOS开发UI篇—Quartz2D使用(截屏) 一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInCont ...
随机推荐
- 手机触摸touch事件
1.Touch事件简介 pc上的web页面鼠 标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如 ipho ...
- retain,copy,assign及autorelease ,strong,weak
一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a ...
- PoE以太网远程供电
每个以太网口向下挂设备提供的最大功率为 15.4W 通过3/5 类双绞线的信号线(1.3.2.6)同时传递数据和电流
- viewpager实现酷炫侧滑demo
晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了. 不过还是有槽点.我是无意中才发现可以左右滑动的.这...你不告诉我,我怎么知道左右可以滑. https://gith ...
- es5.0安装问题
ES的5.0版本听说在性能上大大优化,于是老大说准备换5.0版本.由于在技术群看到很多人都说ES 5.0 安装有问题,在这里贴出自己在使用最新版5.0遇到的问题和解决方法 1.Elasticsearc ...
- [转] GitHub上README.md教程
点击阅读原文 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种 ...
- 图论$\cdot$最短路问题
Dijkstra单源最短路径算法 Dijkstra可以计算出发点到每个点的最短路,及单源最短路径(SSSP).这一特点使得Dijkstra常常用来进行其他算法的预处理.用Dijkstra算法计算最短路 ...
- WebRequest使用
// 待请求的地址 string url = "http://www.cnblogs.com"; // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求 ...
- Annotation
Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target p.p1 { ...
- centos6.6安装配置jboss7.1.1
Centos6.6下安装配置Jboss7.1.1 在了解jboss牛逼特性之后,我决定安装下jboss7.1.1试试 下面是安装包百度云盘链接: http://pan.baidu.com/s/1o6O ...