periscope自制狂赞飘桃心

国外的IOS app“periscope”非常的火,观看手机视频直播的时候,点击屏幕任何一个地方,屏幕右下角就能飘出各种颜色的桃心,效果非常的炫!

为此我自制了一个仿periscope桃心的代码:

- (void) StartLittleHeartShow{

// 构造一个小桃心的UIImageView,其中桃心的颜色可以随机变化

float fColorRedBase   = random()%10/10.0;

float fColorGreenBase = random()%5/10.0;

float fColorBlueBase  = random()%5/10.0;

float fAlphaBase      = 1.0 - random()%7/10.0;

//小桃心的颜色

UIColor* heartColor = [[UIColor alloc] initWithRed:fColorRedBase green:fColorGreenBase blue:fColorBlueBase alpha:fAlphaBase];

//向UIImage的桃心图片中填入随机颜色 

UIImage* flakeImage = [[UIImage imageNamed:@"PooHeart.png"] imageWithTintColor:heartColor];

UIImageView* flakeView = [[UIImageView alloc] initWithImage:flakeImage];

float fXBase = HEART_BK_VIEW_WIDTH/2;//HEART_BK_VIEW_WIDTH是窗体view的宽度

float fYBase = HEART_BK_VIEW_HEIGHT;//HEART_BK_VIEW_HEIGHT是窗体view的高度

// 设置小桃心动画起始点,X位置向右随机偏移0~19

long lRandom = random();

int startX = fXBase+lRandom%20;

int startY = fYBase;

//设置小桃心动画结束点,X位置左右偏移0~74

int endX = ((lRandom%2)==0) ? (startX - lRandom%75) : (startX + lRandom%75);

double scale = 1 / round(random() % 100) + 1.0;//设置桃心大小的随机偏移,这样出来的桃心大小就可以不一样

double speed = 1 / round(random() % 100) + 1.0;//设置桃心飞行的速度偏移,这样每个桃心飞出来的速度就可以不一样

scale = (scale > 1.5) ? 1.5 : scale;

flakeView.frame = CGRectMake(startX, startY, 25.0 * scale, 25.0 * scale);//初始化桃心的frame

@try {

// 把该桃心加入到主视图中,注意在动画完成后,需要把这个桃心从主视图中remove掉

[self.view addSubview:flakeView];

[UIView beginAnimations:nil context:(__bridge void *)(flakeView)];

// 设置桃心飞行的时间,也就是其飞行的速度

float fSpeedBase = random()%5;

fSpeedBase = (fSpeedBase < 3.0) ? 3.0 : fSpeedBase;

float fDuration = fSpeedBase * speed;

fDuration = (fDuration > 5.0) ? 5.0 : fDuration;

fDuration = (fDuration <= 0) ? 2.5 : fDuration;

fDuration = fDuration - 1;

[UIView setAnimationDuration:fDuration];

// 设置桃心的飞行终点!

flakeView.frame = CGRectMake(endX, fYBase-HEART_BK_VIEW_HEIGHT-random()%50, 25.0 * scale, 25.0 * scale);

// 设置桃心动画结束后的callback函数,需要在callback中将flakeView移除self.view

[UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];

[UIView setAnimationDelegate:self];

[UIView commitAnimations];//开始动画

}

@catch (NSException *exception) {

NSLog(@"StartLoveShow exception...");

}

}

 //在动画结束后,onAnimationComplete函数中移除flakeView

- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

UIImageView *flakeView = (__bridge UIImageView *)(context);

flakeView.hidden = YES;

[flakeView removeFromSuperview];

}

//最后放入一个全屏的click事件中,就可以了,点击任何一个地方都可以出桃心

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

[self StartLoveShow];

}

【简易版】IOS仿periscope自制狂赞飘桃心的更多相关文章

  1. 使用 LinkedBlockingQueue 实现简易版线程池

    前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆 ...

  2. iOS 仿看了吗应用、指南针测网速等常用工具、自定义弹出视图框架、图片裁剪、内容扩展等源码

    iOS精选源码 扩展内容的cell - folding-cell 一个近乎完整的可识别中国身份证信息的Demo 可自动快速... JPImageresizerView 仿微信的图片裁剪 带年月和至今以 ...

  3. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  4. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  5. 简易版自定义BaseServlet

    这几天在学Java Web,一直在思考Servlet重用的问题,就用java的反射机制实现自定义的简易版BaseServlet; 该方式有点像struts2 利用映射获取前端的参数.有兴趣的同学可以自 ...

  6. 简易版的TimSort排序算法

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Ja ...

  7. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  8. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

  9. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

随机推荐

  1. GJM:用C#实现网络爬虫(二) [转载]

    上一篇<用C#实现网络爬虫(一)>我们实现了网络通信的部分,接下来继续讨论爬虫的实现 3. 保存页面文件 这一部分可简单可复杂,如果只要简单地把HTML代码全部保存下来的话,直接存文件就行 ...

  2. 解决MVC4发布在IIS7后,路径无法访问.apk文件的解决方法

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  3. 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的

    多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...

  4. 25款响应式,支持视网膜显示的 Wordpress 主题

    响应式和现代设计风格的多用途 WordPress 主题与能够非常灵活的适应所有设备.而高级主题能够更大可能性的轻松定制.所有的主题是完全响应式的,您可以从主题选项中禁用/启用响应模式. 多用途的响应式 ...

  5. jQuery的eq方法

    定义和用法eq() 方法将匹配元素集缩减值指定 index 上的一个. 语法.eq(index) 其中的index :整数,指示元素的位置(最小为 0).如果是负数,则从集合中的最后一个元素往回计数. ...

  6. js控住DOM实现发布微博简单效果

    这段代码的效果具体是输入标题和内容,点击发布把消息发布出去,并使最新的消息始终在内容的最上面,代码为: <!DOCTYPE html> <html lang="en&quo ...

  7. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

  8. ArcCatalog中连接SDE数据库

    描述 在ArcCatalog采用直接的方式连接SDE数据库时,无论怎样填写连接参数,都连接不上(数据库管理工具和代码都可以连).主要报两类错误: Error:ORA-12154:TNS:无法解析指定的 ...

  9. Android UI线程和非UI线程

    Android UI线程和非UI线程 UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这 ...

  10. UITableView

    知识点: 1)UITableView 2)UITableViewCell ====================================================== 一.UITabl ...