1. //
  2. // BallonView.m
  3. // 气球上升的动画
  4. //
  5. // Created by Mac on 16/1/8.
  6. // Copyright © 2016年 Mac. All rights reserved.
  7. //
  8.  
  9. #import "BallonView.h"
  10. @interface BallonView()
  11.  
  12. @property (nonatomic, assign) NSString *postions;
  13. @property (nonatomic, strong) CADisplayLink *link;
  14. @property (nonatomic, strong) NSMutableArray *locations;
  15. @property (nonatomic, strong) NSMutableArray *ballons;
  16.  
  17. @end
  18. @implementation BallonView
  19. //懒加载 存储位置
  20. - (NSMutableArray *)locations
  21. {
  22. if (!_locations) {
  23. _locations = [NSMutableArray array];
  24. }
  25. return _locations;
  26. }
  27. - (NSMutableArray *)ballons
  28. {
  29. if (!_ballons) {
  30. _ballons = [NSMutableArray array];
  31. NSInteger count = ;
  32. UIImage *ballonImage =[UIImage imageNamed:@"sandyBalloon"];
  33. for (int i = ; i < count; i ++) {
  34. CGFloat left = ;
  35. CGPoint location = CGPointMake(left*(i+), self.frame.size.height - );
  36. // [ballonImage drawAtPoint:location];
  37. [self.locations addObject:[NSValue valueWithCGPoint:location]];
  38. [_ballons addObject:ballonImage];
  39. }
  40. }
  41. return _ballons;
  42. }
  43.  
  44. // Only override drawRect: if you perform custom drawing.
  45. // An empty implementation adversely affects performance during animation.
  46. - (void)drawRect:(CGRect)rect {
  47. NSInteger ballonsOfCount = self.ballons.count;
  48. for (int i = ; i < ballonsOfCount; i ++) {
  49. // 获取气球的位置
  50. CGPoint postion = [self.locations[i] CGPointValue];
  51. postion.y -= arc4random_uniform() * 0.7;
  52. if (postion.y == ) {
  53. postion.y = rect.size.height;
  54. }
  55.  
  56. [self.locations replaceObjectAtIndex:i withObject:[NSValue valueWithCGPoint:postion]];
  57. [self.ballons[i] drawAtPoint:postion];
  58. }
  59. NSLog(@"%s",__func__);
  60.  
  61. }
  62.  
  63. // ------------------------------------------------------------------------------------------------------------------
  64. // Drawing code
  65.  
  66. - (instancetype)init
  67. {
  68. if (self = [super init]) {
  69. [self addAnimition];
  70. }
  71. return self;
  72. }
  73. - (void) addAnimition
  74. {
  75. // [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
  76. CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];
  77. [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
  78. self.link = link;
  79. }
  80. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
  81. {
  82. [self.link invalidate];
  83. }
  84.  
  85. @end

2016-1-8 Quartz框架的学习,多个气球上升的小动画的更多相关文章

  1. 2016-1-9 Quartz框架的学习,写字板demo

    一:自定义view .h文件中代码如下 #import <UIKit/UIKit.h> @interface ZLpaintView : UIView @property(nonatomi ...

  2. 2016-1-9 Quartz框架的学习,剪裁图片并设置边框

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  3. pythonweb框架Flask学习笔记02-一个简单的小程序

    #-*- coding:utf-8 -*- #导入了Flask类 这个类的实例将会是我们的WSGI应用程序 from flask import Flask #创建一个Flask类的实例 第一个参数是应 ...

  4. Quartz框架学习(1)—核心层次结构

    Quartz框架学习 Quartz(任务调度)框架的核心组件: job:任务.即任务调度行为中所要调度的对象. trigger:触发器.是什么促使了一个任务的调度?当然是时间.这也算事件驱动类型程序. ...

  5. Quartz框架(第一版)

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  6. Quartz框架

    Quartz框架 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多 ...

  7. spring整合Quartz框架过程,大家可以参考下

    这篇文章详细介绍了spring集成quartz框架流程,通过示例代码进行了详细说明,对学习或任务有参考学习价值,并可供需要的朋友参考. 1.quartz框架简介(m.0831jl.com) quart ...

  8. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  9. 【淘淘】Spring整合Quartz框架

    我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈.这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.当时,我做 ...

随机推荐

  1. bzoj题解汇总(1001-1016)

    bzoj1001: 平面图网络流. 注意只有一行或者一列的情况. bzoj1002: 待定系数法求解递归式.或者用MatrixTree+行列式直接推导. 然后来个高精度. bzoj1003: dp+最 ...

  2. React添加事件

    定义个组件 组件首字母大写,调用: ReactDOM.render(<Hello></Hello>,document.getElementById('box'));

  3. 也谈谈 Redis 和 Memcached 的区别

    本文作者: 伯乐在线 - 朱小厮 . 说到redis就会联想到memcached,反之亦然.了解过两者的同学有那么个大致的印象: redis与memcached相比,比仅支持简单的key-value数 ...

  4. url重写后发布出错问题

    iis7 配置urlrewriter重写失效的问题 在IIS7下,如果使用微软的 URLRewriter 重写控件则需要在WEB.CONFIG中配置以下信息 第一个配置: <configSect ...

  5. java配置数据库连接池的方法步骤

    java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下   先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...

  6. Android开发--Activity的创建

    1.Activity概述 Activity是android四大基本组件之一.每一个activity文件对应一个界面,一个程序由多个activity组成. 2.Android工作目录

  7. 识别低效率的SQL语句

    1.返回行与逻辑读的比率 CREATE TABLE t as select * from dba_objects; --CREATE INDEX idx ON t (object_id); ---例1 ...

  8. GCJ 2015-Qualification-B Infinite House of Pancakes 枚举,思路,误区 难度:3

    https://code.google.com/codejam/contest/6224486/dashboard#s=p1 题目不难,教训记终生 题目给了我们两种操作:1 所有人都吃一个,简记为消除 ...

  9. Catalan数

    先看2个问题: 问题一: n个元素进栈(栈无穷大),进栈顺序为1,2,3,....n,那么有多少种出栈顺序? 先从简单的入手:n=1,当然只有1种:n=2,可以是1,2  也可以是2,1:那么有2种: ...

  10. fetch VS AJAX

    fetch('https://mywebsite.com/endpoint/', { method: 'POST', headers: { 'Accept': 'application/json', ...