【简易版】IOS仿periscope自制狂赞飘桃心
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自制狂赞飘桃心的更多相关文章
- 使用 LinkedBlockingQueue 实现简易版线程池
前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆 ...
- iOS 仿看了吗应用、指南针测网速等常用工具、自定义弹出视图框架、图片裁剪、内容扩展等源码
iOS精选源码 扩展内容的cell - folding-cell 一个近乎完整的可识别中国身份证信息的Demo 可自动快速... JPImageresizerView 仿微信的图片裁剪 带年月和至今以 ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- MVC 验证码实现( 简易版)
现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...
- 简易版自定义BaseServlet
这几天在学Java Web,一直在思考Servlet重用的问题,就用java的反射机制实现自定义的简易版BaseServlet; 该方式有点像struts2 利用映射获取前端的参数.有兴趣的同学可以自 ...
- 简易版的TimSort排序算法
欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Ja ...
- html5 canvas简易版捕鱼达人游戏源码
插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
随机推荐
- activiti工作流的web流程设计器整合视频教程
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- Slick – 这是你需要的最后一款 jQuery 传送带插件
slick 是一款完全响应式的 jQuery 传送带插件,能够根据容器自动适应宽度.在现代浏览器中会使用 CSS3 来实现特殊效果,可以使用扩展方法对项目进行添加.删除和过滤.这是你需要的最后一款 j ...
- Seen.js – 使用 SVG 或者 Canvas 渲染 3D 场景
Seen.js 渲染3D场景为 SVG 或者 HTML5 画布.Seen.js 包含对于 SVG 和 HTML5 Canvas 元素的图形功能的最简单的抽象.所有这个库的其它组件都是不用关心将要渲染的 ...
- git node(&npm)安装
1.git 下载地址:https://git-scm.com/download/win 2.node 下载地址:https://nodejs.org/en/download/ 安装node会自带npm ...
- 【移动适配】一个像素的border怎么实现
一个像素里复杂纷扰的世界 文 | 啃先生 Mar.3rd.2016 首发于微信公众号(啃先生) 上一篇发了<[移动适配]移动Web怎么做屏幕适配> 壹 | Fisrt 在CSS的世界里P ...
- SharePoint 2010 常用技巧及方法总结
1.代码调试确定进程cd c:\windows\system32\inetsrvappcmd list wppause注:保存成批处理文件,查看进程.bat,用的时候双击即可 2.类似列表新建打开方式 ...
- 【读书笔记】iOS-ARC-循环引用-解决办法
一,循环引用最常见的代码类型. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading ...
- android Gui系统之WMS(2)----窗口的添加
Android系统很多,但是最常用的就两类,一类是有系统进场管理的,系统窗口.还有一类就是由应用程序产生的,应用窗口. 1.系统窗口的添加流程 1.1 addStatusBarWindow Phone ...
- js中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...
- 哭瞎!360云盘将关停,你的几十T照片和文件该怎么办
IDO老徐刚得到了一个非常不开心的消息,360云盘将停止个人云盘服务...进行业务转型,在网盘存储.传播内容的合法性和安全性得到彻底解决之前不再考虑恢复,之后转型企业云服务. 而且之前共享的所有资料, ...