截图如下 : 
 
 
 
功能:
 
每次点击礼物,都要通过动画显示一个小图标,最多显示两行图标栏,送多次会显示然后再次显示,显示 XX 送给 XX 一个小礼物的动画样式.动画样式效果为,整体动画模块出现1秒,暂停1秒,消失一秒。
 
功能实现:
 
一个View 上面放了两个小模块,模块内包含两个imageView,3个UIlabel , 通过数组和BOOL开关来创造队列,控制多次打赏的动画显示顺序。
 
首先判断数组中是否有动画队列存在,如果有,按顺序显示 第一个位置显示第一个动画,第二个位置显示第二个动画,等第一个动画显示完开始显示第三个动画。
 
每个动画的执行顺序大概3秒,送礼模块出现1秒,送礼模块暂停1秒,送礼模块消失一秒。
 
队列是通过数组来进行维持。
 
 
 
 
 
 
代码Github :
 
 
 
关键部分代码:
 
- 动画效果:
 
- (void)upLeftViewfadeInWithTime:(NSTimeInterval)time leftView:(IDSGiftSmallLeftSideView *)leftView{
    leftView.alpha = 0;
   
    [UIViewanimateWithDuration:time animations:^{
        leftView.alpha = 1;
    } completion:^(BOOL finished) {
 
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [UIViewanimateWithDuration:0.2animations:^{
                leftView.alpha = 0;
            } completion:^(BOOL finished) {
                _leftViewUpPlaying = NO;
                [selfstartPlay];
            }];
        });
       
    }];
}
 
 
队列函数:
 
- (void)startPlay
{
    if (_playGifSwitch) {
        return;
    }
    if (_queenArray.count == 0) {
        _playGifSwitch = NO;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            if (_leftViewDownPlaying) {
                return;
            }
            if (_leftViewUpPlaying) {
                return;
            }
            self.hidden = YES;
        });
        return;
    }
    self.hidden = NO;
    _playGifSwitch = YES;
    if (_queenArray.count > 0) {
        if (!_leftViewUpPlaying) {
            _playGifSwitch = NO;
            [selfleftViewUpShow:_queenArray[_queenArray.count-1]];
            [_queenArrayremoveLastObject];
            return;
        }
        if (!_leftViewDownPlaying) {
            _playGifSwitch = NO;
            [selfleftViewDownShow:_queenArray[_queenArray.count-1]];
            [_queenArrayremoveLastObject];
            return;
        }
    }
    _playGifSwitch = NO;
}

最新文章

  1. Redis JedisPool
  2. 【转】responseText,responseBody,responseXML差别
  3. Java重点之小白解析--浅谈HashMap与HashTable
  4. 使用JSP处理用户注册和登陆
  5. QTableView使用自定义委托(QItemDelegate)
  6. Nodejs使用coffeescript编写的用户注册/登陆代码(MySQL)
  7. WPF4.5新特性(MSDN的翻译读不太懂)
  8. mac 命令行读取 u盘
  9. Promise简介
  10. CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)
  11. PHP 数组按多个字段排序
  12. VC++调试错误的解决方案
  13. 记一次 OutOfMemoryError: Java heap space 的排错
  14. oracle 会话 解锁
  15. Struts2 标签库详解
  16. JS如何判断一个对象是否为空、是否有某个属性
  17. swift常用第三方库
  18. 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事
  19. MySQL 5.7.16 字符串拆分 -> 单列变多行记录(转发)
  20. Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

热门文章

  1. cordova APP 检查更新
  2. Erlang实现进程池
  3. 1.跟着微软 https://docs.microsoft.com/zh-cn/dotnet/core/ 学习.net core
  4. UML静态视图——类图、对象图、包图
  5. SQLite介绍及使用
  6. OpenGL(十七) 绘制折线图、柱状图、饼图
  7. WPF旋转的界面实现
  8. style文件的指定
  9. IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries
  10. jquery模拟飞秋