当前位置: 首页 > article >正文

iOS UICollectionViewCell 点击事件自动化埋点

iOS 中经常要进行埋点,我们这里支持 UICollectionViewCell. 进行自动化埋点,思路:
通过hook UICollectionViewCell 的setSelected:方法,
则新的方法中执行埋点逻辑,并调用原来的方法

直接上代码

@implementation UICollectionViewCell (LB)+ (void)load
{instanceMethodExchangeImplementations([self class], @selector(setSelected:), [self class], @selector(setSelectedWithFilter:));
}-(void)setSelectedWithFilter:(BOOL)selected
{// 过滤拼音键盘提示词if (selected && !self.skipTrack ) {UIView *tempSuperView = self.superview;while (tempSuperView) {if ([tempSuperView isKindOfClass:[UICollectionView class]]) {break;}tempSuperView = tempSuperView.superview;}// 非LBScrllView的cell,才由setSelected触发点击采集,LB cell由didSelected触发,if (tempSuperView && [tempSuperView isKindOfClass:[UICollectionView class]]&& ![tempSuperView isKindOfClass:[LBCollectionView class]] && ![tempSuperView isKindOfClass:[LBScrollView class]]) {UICollectionView *collectionView = (UICollectionView *)tempSuperView;if (![collectionView isDragging] && ![collectionView isTracking] && ![collectionView isDecelerating]) {[self setMonitorSelected:selected];}}}[self setSelectedWithFilter:selected];
}- (void)setMonitorSelected:(BOOL)selected
{if (selected && !self.skipTrack) {//执行埋点逻辑}
}- (void)logClickCell
{}@end

相关文章:

iOS UICollectionViewCell 点击事件自动化埋点

iOS 中经常要进行埋点,我们这里支持 UICollectionViewCell. 进行自动化埋点,思路: 通过hook UICollectionViewCell 的setSelected:方法, 则新的方法中执行埋点逻辑,并调用原来的方法 直接上代码 implementation UICol…...

QT实现单个控制点在曲线上的贝塞尔曲线

最终效果: 一共三个文件 main.cpp #include <QApplication> #include "SplineBoard.h" int main(int argc,char** argv) {QApplication a(argc, argv);SplineBoard b;b.setWindowTitle("标准的贝塞尔曲线");b.show();SplineBoard b2(0.0001);b2.sh…...

Linux基础开发工具(vim编译器,yum与apt软件安装)

Linux 下载安装软件的方案 源代码安装-》》》非常麻烦与复杂一步错步步错 rmp包安装 -》》》只是安装没有对应的库与依赖相当于只是一个外壳 包管理器进行安装-》》 yum / apt(本篇重点讲解) 1.什么是软件包和软件包管理器 就好⽐ "App" 和 "应⽤商店"…...

神经网络 - 激活函数(Maxout 单元)

一、Maxout 单元 Maxout 单元是一种特殊的激活函数&#xff0c;用于神经网络中&#xff0c;其主要思想是通过多个线性变换的最大值来作为神经元的输出&#xff0c;从而提高模型的表达能力和鲁棒性。 1. 数学定义 假设输入为 x&#xff0c;Maxout 单元会计算 k 个线性变换&am…...

nginx+keepalived负载均衡及高可用

1 项目背景 keepalived除了能够管理LVS软件外&#xff0c;还可以作为其他服务的高可用解决方案软件。采用nginxkeepalived&#xff0c;它是一个高性能的服务器高可用或者热备解决方案&#xff0c;Keepalived主要来防止服务器单点故障的发生问题&#xff0c;可以通过其与Nginx的…...

6.人工智能与机器学习

一、人工智能基本原理 1. 人工智能&#xff08;AI&#xff09;定义与范畴 核心目标&#xff1a;模拟人类智能行为&#xff08;如推理、学习、决策&#xff09;分类&#xff1a; 弱人工智能&#xff08;Narrow AI&#xff09;&#xff1a;专精单一任务&#xff08;如AlphaGo、…...

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…...

谈谈 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心机制&#xff1a;非对称加密 对称加密 HTTPS HTTP over TLS/SSL&#xff0c;通过 ​混合加密体系​ 解决三大问题&#xff1a; ​防窃听​ - 对称加密传输内容&#xff08;如 AES&#xff09;​防篡改​ - 数字签名验证数据完整性​防冒充​ - 数字证书验证服…...

使用DeepSeek+KIMI生成高质量PPT

一、使用DeepSeek DeepSeek官网&#xff1a;DeepSeek 点击“开始对话”&#xff0c;进入交互页面。 在上图中&#xff0c;输入问题&#xff0c;即可获取AI生成的结果。 基础模型&#xff08;V3&#xff09;&#xff1a;通用模型&#xff08;2024.12&#xff09;&#xff0c;高…...

基于SpringBoot的失物招领平台的设计与实现

基于SpringBoot的失物招领平台的设计与实现 基于微信小程序的失物招领系统 失物招领小程序 校园失物招领小程序 基于微信小程序SSMMySQL开发&#xff0c;高分JAVA成品毕业设计&#xff0c;附带往届论文、启动教程、讲解视频、二次开发教程和配套安装包文件&#xff0c;论文中…...

鸿蒙NEXT开发-元服务和服务卡片的开发

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 1. 元服务基本概念 1.1 基本介绍 1.2 元…...

【Spark+Hive】基于Spark大数据技术小红书舆情分析可视化预测系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目目标 三、算法介绍 四、开发技术介绍 五、项目创新点 六、项目展示 七、权威教学视频 源码获取方式在文章末尾 一、项目背景 在数字经济蓬勃发展的当下&#xff0c;社交电商平台小红书凭借其"内容电商"的独特模式&#xff0c;已…...

IO基础知识和练习

一、思维导图 二、练习 1.使用标准IO函数&#xff0c;实现文件的拷贝 #include <head.h> int main(int argc, const char *argv[]) {FILE *pfopen("./one.txt","r");FILE *fpfopen("./two.txt","r");if(pNULL)PRINT_ERROR(&qu…...

gradle libs.versions.toml文件

1.libs.versions.toml介绍2.创建libs.versions.toml文件3.libraries5.versions6.plugins7.bundles 1.libs.versions.toml介绍 下图是官网介绍 意思就是说项目所有插件和库的依赖版本都统一在这个文件配置。 文件中有以下四个部分 versions, 申明要使用的插件和库的版本号的…...

影刀RPA开发拓展--SQL常用语句全攻略

前言 SQL&#xff08;结构化查询语言&#xff09;是数据库管理和操作的核心工具&#xff0c;无论是初学者还是经验丰富的数据库管理员&#xff0c;掌握常用的 SQL 语句对于高效管理和查询数据都至关重要。本文将系统性地介绍最常用的 SQL 语句&#xff0c;并为每个语句提供详细…...

2024_BUAA数据结构上机题解分享

&#x1f4ce; GitHub/Gitee同步开源 | &#x1f680; 点击访问Gitee仓库 点击访问GitHub仓库 &#xff08;若访问缓慢可尝试切换仓库镜像源&#xff09; 这份代码库不是捷径&#xff0c;而是北航数据结构的生存地图。当你被困在递归迷雾中时&#xff0c;愿这些经过OJ系统千锤百…...

什么是分布式和微服务?

一、分布式系统 定义&#xff1a; 分布式系统是由多个独立的计算节点&#xff08;或称为服务器、计算机&#xff09;通过网络相互连接&#xff0c;共同协作以完成特定任务的系统。这些节点可以运行在不同的物理服务器或虚拟机上。 核心思想&#xff1a; 提高系统的可扩展性&am…...

2025 Lakehouse 趋势全景展望:从技术演进到商业重构

1. 为什么湖仓正在成为企业数据架构的必选项&#xff1f; 越来越多的企业正在通过实时数据处理能力构建核心竞争力——用户期待 APP 精准捕捉需求并实时响应&#xff0c;企业员工追求业务系统的秒级反馈&#xff0c;这些场景背后是千亿级数据资产的敏捷调度。 据 IDC 预测&am…...

一、NRF2401无线通信模块使用记录

一、电路引脚图 1、引脚说明&#xff1a; 2、引脚标号&#xff1a; 找到1号引脚&#xff0c;与原理图对号入座。 3、cubemx初始化配置&#xff1a; 5、驱动文件 配置spi&#xff0c;并构建发送与接收函数接口 .h #define TX_ADR_WIDTH 5 //发射地址宽度 #define TX_PLO…...

NVIDIA GPU 架构详解:Pascal、Volta、Turing、Ampere、Ada、Hopper、Blackwell

目录 1. Pascal&#xff08;帕斯卡&#xff09;架构&#xff08;2016&#xff09;关键技术性能特性代表产品应用场景 2. Volta&#xff08;伏特&#xff09;架构&#xff08;2017&#xff09;关键技术性能特性代表产品应用场景 3.Turing&#xff08;图灵&#xff09;架构&#…...

初阶数据结构(C语言实现)——3顺序表和链表(2)

2.3 数组相关面试题 原地移除数组中所有的元素val&#xff0c;要求时间复杂度为O(N)&#xff0c;空间复杂度为O(1)。OJ链接 力扣OJ链接-移除元素删除排序数组中的重复项。力扣OJ链接-删除有序数组中的重复项合并两个有序数组。力扣OJ链接-合并两个有序数组 2.3.1 移除元素 1…...

DeepSeek R1模型性能瓶颈分析与解决方案

摘要 研究发现&#xff0c;DeepSeek R1模型在处理复杂问题时可能遭遇性能瓶颈。当模型过度思考时&#xff0c;其性能会下降。通过减少不必要的思考过程&#xff0c;计算成本可降低43%。研究团队分析了4018条轨迹数据&#xff0c;并创建了一个开源数据集&#xff0c;以推动智能体…...

IP-----BGP协议

7.BGP协议 1.BGP的所属分类 2.BGP的特性 3.BGP的数据包 4.BGP的6种状态机 5.BGP的工作过程 6.BGP的路由黑洞 1.BGP路由黑洞 2.解决方法 7.BGP的防环 1.EBGP水平分割 2.IBGP水平分割 1.解决IBGP环路的规则 2.解决IBGP水平分割问题 3.作用 8.BGP的基础配置 1.查看…...

【String】917. 仅仅反转字母

917. 仅仅反转字母 - 力扣&#xff08;LeetCode&#xff09; 使用双指针&#xff0c;一个指针指向s的开始&#xff0c;一个指向s的末尾&#xff0c;同时遍历即可。...

python3使用selenium打开火狐并全屏

序言 本来桌面端全屏这种东西现在用electron或者tauri来做软件的全屏&#xff0c;但是奈何今天拿到了一块早些年的nx板子&#xff0c;arm架构的&#xff0c;系统有点老&#xff0c;装node只能到16版本&#xff0c;装了半天终于搞好了&#xff0c;发现这个系统没法隐藏系统的顶…...

探秘基带算法:从原理到5G时代的通信变革【二】Viterbi解码

文章目录 二、关键算法原理剖析2.1 Viterbi 解码2.1.1 卷积码与网格图基础**卷积码****网格图****生成多项式****理想情况下解码过程** 2.1.2 Viterbi 算法核心思想2.1.3 路径度量与状态转移机制2.1.4 算法流程与关键步骤详解2.1.5 译码算法举例与复杂度分析2.1.6 算法代码示例…...

Spring Bean 作用域设置为prototype在并发场景下是否是线程安全的

在并发场景下&#xff0c;将 Spring Bean 作用域设置为 prototype 通常能在一定程度上保证线程安全&#xff0c;但这并不意味着绝对的线程安全 1. prototype 作用域的特点 在 Spring 中&#xff0c;Bean 的作用域定义了 Bean 的生命周期和可见性。prototype 作用域表示每次从…...

金融项目实战

测试流程 测试流程 功能测试流程 功能测试流程 需求评审制定测试计划编写测试用例和评审用例执行缺陷管理测试报告 接口测试流程 接口测试流程 需求评审制定测试计划分析api文档编写测试用例搭建测试环境编写脚本执行脚本缺陷管理测试报告 测试步骤 测试步骤 需求评审 需求评…...

mybatis热点面试题第五弹

1. MyBatis与Hibernate的区别 答案&#xff1a; MyBatis&#xff1a; 不完全是一个ORM框架&#xff0c;需要手动编写SQL语句&#xff0c;灵活性高&#xff0c;适合对数据库操作有高性能要求的场景。缺点是无法做到数据库无关性&#xff0c;如果需要支持多种数据库&#xff0c…...

c++头文件和命名空间

在 C 中&#xff0c;头文件和命名空间是两个重要的概念&#xff0c;它们分别用于代码组织和作用域管理。 一、头文件&#xff08;Header Files&#xff09; 1. 作用 声明接口&#xff1a;存放函数、类、变量的声明&#xff08;而非定义&#xff09;。代码复用&#xff1a;通…...