p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1d9421 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1d9421 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81 }
span.s1 { font: 18.0px Menlo }
span.s2 { }
span.s3 { color: #c32275 }
span.s4 { color: #000000 }
span.s5 { font: 18.0px "PingFang SC" }
span.s6 { color: #6122ae }
span.s7 { color: #3d1d81 }
span.s8 { font: 18.0px Menlo; color: #000000 }
span.s9 { color: #703daa }
span.s10 { color: #0435ff }
span.s11 { color: #539aa4 }
span.s12 { color: #294c50 }
span.s13 { color: #78492a }

//CADisplayLink  和屏幕刷新频率相同

//开始下雪

- (void) beginShow{

//启动定时器,使得一直调用setNeedsDisplay从而调用- (void) drawRect:(CGRect )rect

//不得手动调用- (void) drawRect:(CGRect )rect

CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];

//让定时器循环调用

[link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

}

- (void) drawRect:(CGRect)rect {

//控制雪花最多的个数

//    if (self.subviews.count >250) {

//        return;

//    }

if (self.subviews.count >20) {

return;

}

//雪花的宽度

int width = arc4random() % 5;

while (width < 2) {

width = arc4random() % 5;

}

//雪花的速度

int speed = arc4random() % 10;

while (speed < 5) {

speed = arc4random() % 10;

}

//雪花起点y

int startY = - (arc4random() % 100);

//雪花起点x

int startX = arc4random() % (int) [UIScreen mainScreen].bounds.size.width;

//雪花终点x

int endX = arc4random() % (int) [UIScreen mainScreen].bounds.size.width;

//int endX = arc4random() % (int)_bgView.height;

//int endX = arc4random() % (int)(_bgView.height - 71*GOP_HeightR);//同

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.snowImgName]];

imageView.frame = CGRectMake(startX, startY, width, width);

[self addSubview:imageView];

//设置动画

[UIView animateWithDuration:speed animations:^{

//设置雪花最终的frame

//        imageView.frame = CGRectMake(endX, [UIScreen mainScreen].bounds.size.height, width, width);

//雪花最终下落的高度为_bgView的高度减去71*GOP_HeightR的高度

imageView.frame = CGRectMake(endX, _bgView.height-71*GOP_HeightR, width, width);

//设置雪花的旋转

imageView.transform = CGAffineTransformRotate(imageView.transform, M_PI);

//设置雪花透明度,使得雪花快落地的时候就像快消失的一样

//imageView.alpha = 0.3;

} completion:^(BOOL finished) {

[imageView removeFromSuperview];

}];

}

雪花降落CADisplayLink的更多相关文章

  1. 雪花降落CAEmitterLayer粒子效果

    CAEmitterLayer 实现雪花效果   首先需要导入#import <QuartzCore/QuartzCore.h>   /**在iOS 5中,苹果引入了一个新的CALayer子 ...

  2. jq制作圣诞主题页面

    今天制作的是有飘雪效果的圣诞主题页面,个人灰常喜欢. 首先还是放张效果图: 当看到这这页面的时候我们要注意四点: 1.图片的轮播 2.文字的滚动效果 3.音乐播放 4.飘雪效果 那我们就一点一点来完成 ...

  3. 梦殇 chapter three

    chapter three 悲伤有N个层面.对于生命是孤独的底色,对于时间是流动的伤感,对于浪漫是起伏的变奏,对于善和怜悯是终生的慨叹…… 出去和舍友买完东西,刚回到宿舍,舍友就说,刚才有人给你打电话 ...

  4. AJ学IOS(33)UI之Quartz2D雪花飘落效果刷帧

    AJ分享,必须精品 效果: 可以加入随机数实现真的飘落效果哦. 代码: -(id)initWithCoder:(NSCoder *)aDecoder { //请注意这里一定要先初始化父类的构造方法 i ...

  5. IOS第16天(5,Quartz2D雪花)

    *** #import "HMView.h" @interface HMView() { int count; } @property (nonatomic, assign) CG ...

  6. iOS定时器-- NSTimer 和CADisplaylink

    iOS定时器-- NSTimer 和CADisplaylink 一.iOS中有两种不同的定时器: 1.  NSTimer(时间间隔可以任意设定,最小0.1ms)// If seconds is les ...

  7. iOS开发Quartz2D之 七:雪花效果

    #import "VCView.h" @implementation VCView -(void)awakeFromNib { //[NSTimer scheduledTimerW ...

  8. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  9. CADisplayLink 及定时器的使用

    第一种: 用CADisplayLink可以实现不停重绘. 例子:   CADisplayLink* gameTimer; gameTimer = [CADisplayLink displayLinkW ...

随机推荐

  1. 微信小程序之快速接入七牛云

    小程序为什么要接入云? 目前,开发者在开发小程序过程中,主要遇到以下几个问题: 小程序发布大小超限 微信官方限制小程序的发布代码不能超过 1MB,而在实际开发过程中,一般的小程序难免会有图片等富媒体文 ...

  2. 自制基于HMM的中文分词器

    不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...

  3. [转载] 编程每一天(Write Code Every Day)

    转载自:http://kb.cnblogs.com/page/536779/ 英文原文:Write Code Every Day 去年秋天,我的个人项目似乎走到了尽头:我一直没能取得必要的进展,在不牺 ...

  4. OCR技术浅探: 语言模型(4)

    由于图像质量等原因,性能再好的识别模型,都会有识别错误的可能性,为了减少识别错误率,可以将识别问题跟统计语言模型结合起来,通过动态规划的方法给出最优的识别结果.这是改进OCR识别效果的重要方法之一. ...

  5. 《响应式Web设计—HTML5和CSS3实战》 学习记录

    作者:Ben Frain 学习时间   2016/5/12 第一章   设计入门 *视口调试工具 IE:Microsoft Internet Explorer Develop Toolbar Safa ...

  6. OSS.Common扩展.Net Standard支持实例分享

    上篇(.Net基础体系和跨框架开发普及)介绍了.Net当前生态下的大概情况,也分享了简单实现的过程,这篇文章就是讲解我的OSS.Common项目扩展.Net Standard 支持的过程,主要集中在: ...

  7. PHP变量处理之serialize

    官方定义: string serialize ( mixed $value ) serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方.这有利于存储或传递 P ...

  8. Swift 2.2 协议和代理

    一:代理 两个类之间的传值,类A调用类B的方法,类B在执行过程中遇到问题通知类A,这时候我们需要用到代理(Delegate). 比如:控制器(Controller)与控制器(Controller)之间 ...

  9. windows 下 多版本nodejs切换 nvmw

    以下教程不适用于nodejs v0.6.5及以下版本 nvmw 下载到本地 Git clone https://github.com/hakobera/nvmw.git 2.设置环境PATH 添加如上 ...

  10. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...