iOS开发学习之简单动画
原文
http://www.cnblogs.com/letougaozao/p/3673927.html
- UIActivityIndicatorView
- UIImageView的序列帧动画
- UIView动画
- 时钟动画
一、UIActivityIndicatorView
-isAnimating属性判断是否正在动画
2⃣️第三方库SVProgressHUD
[SVProgressHUD dismiss]
[SVProgressHUD showWithStatus:@“网络加载中” maskType:SVProgressHUDMashTypeGradient];(后面的参数是否遮挡,可以不用)
[NSTimer scheduledTimerWithTimeInterval:1 target:2 selector:3 userInfo:4 repeats:5];
1.时间间隔 2.self 3.触发时调用的方法 4.用户信息 5.是否重复
[timer invalidate];
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 使用了SVProgress的maskType属性,当前视图无法接受触摸事件 // 需要想办法关闭 // 使用NSTimer if ([_indicatorView isAnimating]) { [SVProgressHUD dismiss]; [_indicatorView stopAnimating]; } else { [SVProgressHUD showWithStatus:@"等会~~~" maskType:SVProgressHUDMaskTypeGradient]; // 指示器一启动,就无法交互了,要把时钟放在这里 [_indicatorView startAnimating]; [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:NO]; } }// NSTimer调用方法的参数,只能是NSTimer,使用参数,在当前示例中,就不需要使用成员变量了 - (void)updateTimer:(NSTimer *)timer { [SVProgressHUD dismiss]; [_indicatorView stopAnimating]; // 关闭时钟 [timer invalidate]; }
-animationImages:要显示的一组图盘
-animationDuration:显示所有图片需要的时间(如果中间由修改速度,需要先停止、设置、开始)
-animationRepeatCount:动画的执行次数
--(void)startAnimating;
--(void)stopAnimating
--(void)isAnimating;
// 创建赵云的序列帧动画 - (void)createZhaoyunImage { // Do any additional setup after loading the view, typically from a nib. // 设置ImageView的序列帧动画 // 1. 需要一个数组 NSMutableArray *images = [NSMutableArray array]; for (int i = 1; i < 11; i++) { NSString *fileName = [NSString stringWithFormat:@"/images/zy/%d.png", i]; UIImage *image = [UIImage imageNamed:fileName]; [images addObject:image]; } [_zhaoyunImage setImage:images[0]]; // 设置图像数组 [_zhaoyunImage setAnimationImages:images]; // 设置10张图片播放的时长 [_zhaoyunImage setAnimationDuration:1.0f]; // 开始动画 [_zhaoyunImage startAnimating]; }- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if ([_zhaoyunImage isAnimating]) { // 序列帧动画每次停止的时候,都会显示设置的图像,而不是当前播放到的图像 [_zhaoyunImage stopAnimating]; } else { [_zhaoyunImage startAnimating]; } }
2.燕子动画
#pragma mark - 拖拽燕子 - (void)dragBird:(UIPanGestureRecognizer *)sender { // 先需要知道手指的位置 CGPoint location = [sender locationInView:self.view]; // 手势状态改是UIGestureRecognizerStateChanged的时候,手指还没有离开屏幕 // 这个时候,可以修改鸟的位置,同时让鸟扑腾 if (sender.state == UIGestureRecognizerStateChanged) { // 注意:如果要修改播放中的序列帧动画 // 1. 需要先停止动画 [_birdImage stopAnimating]; // 2. 修改动画频率 [_birdImage setAnimationDuration:0.2f]; // 3. 重新启动动画 [_birdImage startAnimating]; // 修改燕子的动画频率 // 设置燕子的位置 [_birdImage setCenter:location]; } else if (sender.state == UIGestureRecognizerStateEnded) { // 恢复燕子慢悠悠 // 1. 需要先停止动画 [_birdImage stopAnimating]; // 2. 修改动画频率 [_birdImage setAnimationDuration:1.2f]; // 3. 重新启动动画 [_birdImage startAnimating]; } }// 设置燕子的序列帧动画,并设置燕子的拖拽手势监听 - (void)createBirdImage { // 设置燕子的序列帧动画 NSArray *images = @[[UIImage imageNamed:@"/images/素材/燕子1.png"], [UIImage imageNamed:@"/images/素材/燕子2.png"]]; [_birdImage setAnimationImages:images]; [_birdImage setAnimationDuration:1.2f]; [_birdImage startAnimating]; // 定义手势 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragBird:)]; [_birdImage addGestureRecognizer:pan]; // 设置燕子图片允许用户交互 [_birdImage setUserInteractionEnabled:YES]; }
三、UIView动画
四、时钟动画(CADisplayLink)
-是一种以屏幕刷新屏幕触发的时钟机制,每秒钟执行大约60次
-倒入QuartzCore框架
-定义CADisplayLink并制定触发调用方法
-将显示链接添加到主运行循环队列
2⃣️两种判断时间间隔的方法
-以成员变量的方式判断
-以全局变量的方式判断
@interface ViewController () { // 游戏时钟 CADisplayLink *_gameTimer; // 时钟触发的初始时间 CFTimeInterval _startTime; } @end @implementation ViewController#pragma mark - 使用指定时间处理CADisplayLink触发时间的方法(1) - (void)updateTimer:(CADisplayLink *)sender { // 如果_startTime=0,说明是第一次触发时钟,需要记录时钟的时钟戳记 if (_startTime == 0) { _startTime = sender.timestamp; } // 时钟触发的时间差值 CFTimeInterval deltaTime = sender.timestamp - _startTime; if (deltaTime > 1.0) { NSLog(@"时钟触发了 %f", sender.timestamp); // 更新_startTime的数值,记录本次执行任务的时间 _startTime = sender.timestamp; } }#pragma mark - 使用指定时间处理CADisplayLink触发时间的方法(2) - (void)step { // 假定每隔一秒触发一次方法 if (steps % (10 * 60 * 60) == 1) { NSLog(@"时钟触发了! %ld", steps); } steps++; }- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 首先将启动的时间点设置为0 _startTime = 0.0f; // 将屏幕刷新总次数设置为0 steps = 0; // 初始化游戏时钟 _gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)]; // 初始化时钟之后,有一个必须要做的,就是把游戏时钟,添加到主运行循环 [_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; }
-初始化一个游戏时钟,并且加入主队列中
-自己制定时间间隔,去执行操作
1.需要一个成员变量,记录时钟起始的“时间点”:CFTimeInterval _startTime;
2.计算成员变量去与时钟触发时的时间差,如果大于制定的时间差,再去执行操作
-定义一个全局的每秒中执行的次数
-如果执行了这个次数,就执行要执行的操作
steps = 0;
// 初始化雪花图像
_snowImage = [UIImage imageNamed:@"/images/素材/雪花"];
// 初始化时钟
_gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
[_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
#pragma mark - 时钟处理方法
- (void)step
{
// 假设每秒钟绘制6个雪花
if (steps % 10 == 0) {
// 绘制雪花
UIImageView *imageView = [[UIImageView alloc]initWithImage:_snowImage];
// 指定雪花出现的位置
CGPoint startPoint = CGPointMake(arc4random() % 320, -30.0);
// 指定雪花结束的位置
CGPoint endPoint = CGPointMake(arc4random() % 320, 490);
/**
新问题
1. 雪花太大
2. 雪花太亮,需要改一下透明度
3. 如果雪花会转就更好了
*/
CGFloat r = arc4random() % 5 + 10;
[imageView setFrame:CGRectMake(0, 0, r, r)];
// 设置起始点
[imageView setCenter:startPoint];
// 把雪花图像添加到视图
[self.view addSubview:imageView];
[UIView animateWithDuration:6.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
[imageView setCenter:endPoint];
[imageView setAlpha:0.2f];
[imageView setTransform:CGAffineTransformMakeRotation(M_PI)];
} completion:^(BOOL finished) {
// 从父视图删除,这个千万不要忘了
[imageView removeFromSuperview];
}];
}
}
iOS开发学习之简单动画相关推荐
- 【IOS开发进阶系列】动画专题
1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hello_Hwc/archive/123447.html 1.1 基本概念 1.1.1 CA ...
- IOS开发学习周报(二)
IOS开发学习周报(二) 简介 课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师 学号 16340015 专业(方向) 软件工程(计应) 姓名 陈彬彬 Email 9441312 ...
- ios开发学习-手势交互(Gesture)效果源码分享
qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...
- iOS开发UI篇—简单介绍静态单元格的使用
iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...
- ios开发学习笔记--Core Motion
iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一. 简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...
- IOS开发基础之核心动画 基础动画、关键帧、组动画案例
IOS开发基础之核心动画 基础动画.关键帧.组动画案例 案例源码在我的主页里.实现效果图 // // ViewController.m // 30-核心动画 // // Created by 鲁军 o ...
- 李洪强iOS开发之- 实现简单的弹窗
李洪强iOS开发之- 实现简单的弹窗 实现的效果: 112222222222223333333333333333
- IOS开发学习笔记-----UILabel 详解
IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...
- iOS开发-ZFPlayer的简单使用 播放单个网络视频
iOS开发-ZFPlayer的简单使用 播放单个网络视频 前言 开发准备 代码 注意 前言 关于ZFPlayer播放单个网络视频案例,它的网络列表视频案例在gitHub上面很多. 开发准备 podfi ...
最新文章
- 字符串BF和KMP匹配算法
- JDK里常见容器总结
- WinMain中的Console与main中的Window
- Dlib学习笔记:解决dlib array2d转 OpenCV Mat时颜色失真
- Ajax — 评论列表
- FFT/NTT/FMT/FWT题目
- win10如何提高电脑画质_win10电脑怎么提高画质 | 手游网游页游攻略大全
- python3安装包是说解压数据出错怎么办_无法修复“zipimport.zipimporter错误:无法解压缩数据;键入python3.6时zlib不可用获取pip.py...
- python需要下载哪些软件-学python下载什么软件开发
- hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)
- 解读汽车机械工作原理GIF图 懂得三个算你牛!
- Android商品详情页上拉查看详情
- EXCEL工作表保护密码破解
- python写android抢票软件,如何用python写一个简单的12306抢票软件
- 信息安全服务资质认证实施规则
- 小程序源码:修复登录接口仿抽奖助手
- oracle 删除数据违反约束条件,ORA-02292: 违反完整约束条件 处理
- 国内明明有期货公司,为什么那么多人却喜欢做外盘呢
- K65 Flex_CAN模块初始化
- 织梦wap.php怎么改,利用DEDECMS织梦建立wap站
热门文章
- JdbcTemplate基础【项目demo】【基础知识】【简单明了,一眼就会】
- 基于wasm的探索与研究(一)
- 服装销售中,你的导购会赞美吗?
- CentOS6和CentOS7区别
- 漫画:什么是 “原型模式” ?
- 权限系统 6_1权限管理
- Unity_EasyAR4.0_前置后置摄像头切换
- 异数OS-织梦师-管仲(八) 并发危机解决之道
- linux抓包工具(wireshark与tcpdump)
- Hybrid Contrastive Learning with Cluster Ensemble for Unsupervised Person Re-identification