直播间源码,怎么实现动态礼物效果

介绍

记录、总结直播间源码开发遇到一些问题,大家一起交流学习。 这次带来,对直播间源码的常用动画总结。 

效果展示

下面是一个很多直播间源码都有的入门豪华礼物动画——烟花。 一个复杂的礼物动画,首先是美术给出gif实现草图素材,技术进行动画剖析图片压缩,在程序中加载图片实现动画,其中要注意内存和CPU占用

 烟花

图片压缩、加载与裁剪

1、图片压缩

美术给出的图片,即使是压缩过,仍存在较大的压缩空间,可以用这里或者更好的大小优化。

2、图片加载

主要有-imageNamed:-imageWithContentsOfFile:两种方式。 AnimationImageCache类是一个动画图片加载类,用单例实现且内部用NSCache持有引用。

注意,当收到内存不足警告时,NSCache会自动释放内存。所以每次访问NSCache,即使上一次已经加载过,也需要判断返回值是否为空。

 3、图片裁剪

为了减少图片资源的大小,有时候会把多个帧动画做成连续的一张图。这时需要直播间源码加载一整张资源图,并在相应的位置进行裁剪。

   UIImage* sourceImage = [UIImage imageNamed:@"image/animation/gift_boat"];
    CGSize sourceSize = sourceImage.size;
    CGImageRef cgimage = CGImageCreateWithImageInRect(sourceImage.CGImage,
                                                      CGRectMake(0, 0, const_position_boat_x, sourceSize.height));
    gWaveFrameImage = [UIImage imageWithCGImage:cgimage];
    CGImageRelease(cgimage);
    cgimage = CGImageCreateWithImageInRect(sourceImage.CGImage,
                                           CGRectMake(const_position_boat_x, 0, const_position_boat_width, sourceSize.height));
    gBoatFrameImage = [UIImage imageWithCGImage:cgimage];
    CGImageRelease(cgimage);
    cgimage = CGImageCreateWithImageInRect(sourceImage.CGImage,
                                           CGRectMake(const_position_boat_x + const_position_boat_width, 0, sourceSize.width - const_position_boat_x - const_position_boat_width, sourceSize.height));
    gShadowFrameImage = [UIImage imageWithCGImage:cgimage];
    CGImageRelease(cgimage);

动画剖析与时间轴

下面这个是一个全屏类型的“天使”礼物动画,我们来剖析下这个动画的构成。

  • 1、背景变暗,出现星空;
  • 2、流星划过、月亮出现、云彩飘动;
  • 3、两侧浮空岛震动,中间浮空岛出现;
  • 4、背光出现,天使落下,翅膀扇动;
  • 5、星星闪烁、凤凰出现;
  • 6、渐隐消失;

 天使

时间轴实现

为了让动画按照时间顺序一一执行,可以把动画按时间和对象分成多个方法,通过GCD在指定的时间调用。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self playMeteorAnimation];
    });
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self playLandAnimation];
    });
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self playLightAnimation];
    });
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(7.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self playStarAnimation];
    });

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(TOTAL_TIME * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        @weakify(self);
        [UIView animateWithDuration:0.5 animations:^{
            self.alpha = 0;
        } completion:^(BOOL finished) {
            @strongify(self);
            [self removeFromSuperview];
            [self callBackManager];
        }];
    });

声明:本文由云豹科技转发自落影博客,如有侵权请联系作者删除​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述: iShow是一套基于P2P技术的在线视频直播系统,iShow依存于web网页,无需下载插件,可实现低延时高清的视频语音直播体验。现已广泛应用于教育、娱乐、客服等各个行业,随着国内带宽的提升和各类新技术的加入,视频直播技术已经逐渐成为下一代互联网的主流,多媒体在线直播体验势必将会涵盖各类终端,成为全民参与的新一代互联网主旋律。 随着国家网络带宽的升级,民用宽带的价格逐渐降低以及微博等即时交流的网络媒体的兴盛,视频多媒体将将成为下一代网络的主流力量,iShow作为国内第一个也是唯一一个使用点对点视频技术开发的网站应用,正在引领一股新的流媒体平民化浪潮。 功能列表: 1、即时视频语音直播 2、视频状态检测 3、局域网内的P2P直播,不消耗任何外网带宽 4、可设置的视频清晰度和缓冲时间 5、无延时的即时文字和表情传输 6、礼物/消费/主播结算/房间类型等功能 7、播放录像功能 iShow的技术优势: 1、直播低延时、文本数据即时传输 2、多媒体直播不耗费任何服务器资源,对服务器无负载 3、带宽占用低 4、视频高清,采用高清编码,影响更清晰,传输更流畅 5、无需架设额外的视频流媒体服务器,节省60%~90%的运营开支 6、可扩展,可跨平台同步直播 7、兼容任何开发语言,简单几步可与任何网站进行对接整合 8、智能识别用户的在线状态 9、可脱离动态程序和数据库独立运行,如:无需任何架设,即可直接集成到任何网站,进行直播或文字沟通 目前同行业唯一一款成熟产品,处于行业绝对领跑者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值