iOS学习笔记-057.自定义View04——刷帧动画

来源:互联网 发布:2013网络歌手 编辑:程序博客网 时间:2024/05/17 01:59

  • 自定义View04刷帧动画
    • 一视图重新绘制的方法
    • 二基本刷帧代码
      • ViewControllerm
      • WMViewm
    • 三基本刷帧图示
    • 四两个定时器
    • 五刷帧动画代码
    • 六刷帧动画图示

自定义View04——刷帧动画

一、视图重新绘制的方法

二、基本刷帧代码

ViewController.m

////  ViewController.m//  03_UIView46_刷帧////  Created by 杞文明 on 2016/04/15 07:59:13   星期五//  Copyright © 2016年 杞文明. All rights reserved.//#import "ViewController.h"#import "WMView.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet WMView *wmView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];}//半径改变- (IBAction)radiusChange:(UISlider *)sender {    self.wmView.radius = sender.value;}@end

WMView.m

////  WMView.m//  03_UIView46_刷帧////  Created by 杞文明 on 2016/04/15 07:59:20   星期五//  Copyright © 2016年 杞文明. All rights reserved.//#import "WMView.h"@implementation WMView-(void)awakeFromNib{    //让其默认有个半径    self.radius = 10;}-(void)setRadius:(float)value{    _radius = value;    //通知自定义view重新绘制图形    [self setNeedsDisplay];}- (void)drawRect:(CGRect)rect {    //1.获取上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();    //2.绘画    CGContextAddArc(ctx,rect.size.width/2, rect.size.height/2,_radius, 0, 2*M_PI, 0);    [[UIColor purpleColor]set];    //3.渲染    CGContextFillPath(ctx);}@end

三、基本刷帧图示

这里写图片描述

四、两个定时器

// NSTimer一般用于定时的更新一些非界面上的数据NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updataImage) userInfo:nil repeats:YES];// 创建CADisplayLink, 默认每秒60次CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self selector:@selector(updataImage)];// 将CADisplayLink加入到消息循环中[display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

五、刷帧动画代码

////  WMView.m//  03_UIView47_刷帧动画////  Created by 杞文明 on 2016/04/15 08:08:47   星期五//  Copyright © 2016年 杞文明. All rights reserved.//#import "WMView.h"@implementation WMView-(void)awakeFromNib{    //创建CADisplayLink,默认每秒60次    CADisplayLink * display = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateImage)];    //把CADisplayLink加入到信息循环中去    [display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];}//更新这个方法,其实就是重新绘制而已-(void)updateImage{    [self setNeedsDisplay];}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect {    //1.获取上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();    //2.绘制    self.imageY +=5;    if(self.imageY>=rect.size.height){        self.imageY = 0;    }    //3.渲染    UIImage *image = [UIImage imageNamed:@"snow"];    [image drawAtPoint:CGPointMake(10,self.imageY)];}@end

六、刷帧动画图示

这里写图片描述

0 0