如何快速的开发一个完整的iOS直播app】(点赞功能)

2024-05-30 15:08

本文主要是介绍如何快速的开发一个完整的iOS直播app】(点赞功能),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

客户端代码

  • 点击小红心,发送socket给服务器,并且要传递房间Key给服务器,通知给哪个主播点赞,就能传入到对应的分组socket中
  • 怎么传递房间key,房间Key在主播界面,一般一个客户端,只会产生一个房间,可以记录到socket对象中
  • 业务逻辑:用户点击小红心,小红心就会往上慢慢飘。
  • 实现原理:其实就是一个动画。
  • 怎么实现:用UIView做不了,因为小红心是不规则的左右摆动,慢慢上去的。
  • 可以使用核心动画(创建CALayer),CABasicAnimation和CAKeyframeAnimation,放在一个group组中。
  • CABasicAnimation:渐渐显示动画,修改透明度
  • CAKeyframeAnimation:做路径动画,描述小红心的路径,然后按照这个路径走.
    • 描述一根线,x从宽度中获取随机值,y值每次减减
  • 动画完成,记得移除,可以用动画事务类,监听动画是否完成,代码一定要放在最前面
XMGLiveOverlayViewController.m- (IBAction)clickUpvote:(id)sender {// 发送点赞事件[[SocketIOClient clientSocket] emit:@"upvote" with:@[[SocketIOClient clientSocket].roomKey]];}XMGUpVoteViewController.m
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.[[SocketIOClient clientSocket] on:@"upvote" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ack) {// 监听到点赞,进行点赞动画[self setupVoteLayer];}];}- (void)setupVoteLayer
{CALayer *layer = [CALayer layer];layer.contents = (id)[UIImage imageNamed:@"hearts (1)"].CGImage;[self.view.layer addSublayer:layer];layer.bounds = CGRectMake(0, 0, 30, 30);layer.position = CGPointMake(self.view.width * 0.5, self.view.height);[self setupAnim:layer];
}- (void)setupAnim:(CALayer *)layer
{[CATransaction begin];[CATransaction setCompletionBlock:^{[layer removeAllAnimations];[layer removeFromSuperlayer];}];// 创建basic动画CABasicAnimation *alphaAnim = [CABasicAnimation animation];alphaAnim.keyPath = @"alpha";alphaAnim.fromValue = @0;alphaAnim.toValue = @1;// 路径动画CAKeyframeAnimation *pathAnim = [CAKeyframeAnimation animation];pathAnim.keyPath = @"position";pathAnim.path = [self animPath].CGPath;// 创建动画组CAAnimationGroup *group = [CAAnimationGroup animation];group.animations = @[alphaAnim,pathAnim];group.duration = 5;[layer addAnimation:group forKey:nil];[CATransaction commit];
}- (UIBezierPath *)animPath
{UIBezierPath *path = [UIBezierPath bezierPath];CGFloat y = self.view.height;CGFloat x = self.view.width * 0.5;while (y > 0) {x = arc4random_uniform(self.view.width - 20) + 20;if (y == self.view.height) {[path moveToPoint:CGPointMake(x, y)];} else {[path addLineToPoint:CGPointMake(x, y)];}y -= 20;}return path;
}


作者:袁峥
链接:https://www.jianshu.com/p/ac17fe0af5ae
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这篇关于如何快速的开发一个完整的iOS直播app】(点赞功能)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016419

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避