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

成都服装网站建设电子商务网站建设与维护 答案

成都服装网站建设,电子商务网站建设与维护 答案,动漫网页设计作品欣赏,网站报错 自动404项目中很多情况下视图的点击点是通过UITapGestureRecognizer 来实现的,这个时候我们就也是可以支持自动化埋点的 思路如下: 通过运行时hook UITapgestureRecognizer的addTarget:action: 方法 和initWithTarget:action: 方法,在交换的方法中添…

项目中很多情况下视图的点击点是通过UITapGestureRecognizer 来实现的,这个时候我们就也是可以支持自动化埋点的
思路如下:
通过运行时hook UITapgestureRecognizer的addTarget:action: 方法
和initWithTarget:action: 方法,在交换的方法中添加埋点的响应方法,
并保留原始的响应方法,在埋点响应方法中执行埋点方法,然后调用原来的响应

直接上代码,

@interface UIGestureRecognizer (Event)@property (nonatomic, strong) NSString *actionName;#pragma mark - Private@property (nonatomic, strong) NSString *senderAction;@end
//
//  UIGestureRecognizer+Event.m
//  TEXT
//
//  Created by mac on 2025/3/2.
//  Copyright © 2025 刘博. All rights reserved.
//#import "UIGestureRecognizer+Event.h"
#import "NSObject+Swizzle.h"static const void *monitorActionNameKey = "monitorActionNameKey";
static const void *KSenderAction = "KSenderAction";static const char *KTargetActionPair = "KTargetActionPair";@implementation  UIGestureRecognizer (Event)+ (void)load
{[NSObject exchangeInstanceMethod:[self class] originalSel:@selector(addTarget:action:) swizzledSel:@selector(log_addTarget:action:)];[NSObject exchangeInstanceMethod:[self class] originalSel:@selector(initWithTarget:action:) swizzledSel:@selector(initWithLogTarget:action:)];
}- (void)log_addTarget:(id)target action:(SEL)action
{//只记录点击事件if ([self isKindOfClass:[UITapGestureRecognizer class]]) {// 原因:UIWebView init时,系统API内部触发UIKit`-[UIWebBrowserView installGestureRecognizers]:// 过滤部分系统私有手势NSString *targetClsStr = NSStringFromClass([target class]);NSString *gesClsStr = NSStringFromClass([self class]);if(target && ( [targetClsStr hasPrefix:@"UIWeb"] || [gesClsStr hasPrefix:@"_UI"] || [gesClsStr hasPrefix:@"WKSynthetic"] || [gesClsStr hasPrefix:@"UIKB"])){[self log_addTarget:target action:action];return;}NSMapTable *targetActions = [self targetActionPair];if (targetActions == nil ) {targetActions = [NSMapTable mapTableWithKeyOptions:NSPointerFunctionsStrongMemoryvalueOptions:NSPointerFunctionsWeakMemory];[self setTargetActionPair:targetActions];}[targetActions setObject:target forKey:NSStringFromSelector(action)];[self log_addTarget:self action:@selector(logAction:)];//先记录action[self setSenderAction:NSStringFromSelector(action)];}else{[self log_addTarget:target action:action];}
}- (void)logAction:(UIGestureRecognizer *) sender
{UIView *view = self.view;//执行埋点操作NSLog(@"哈哈哈手势点击埋点了手势点击埋点了手势点击埋点了");[self callOriginActions];
}- (void)callOriginActions
{NSMapTable *targetActions = [[self targetActionPair] copy];NSEnumerator *enumerator = [targetActions keyEnumerator];id selector;while ((selector = [enumerator nextObject])) {id target = [targetActions objectForKey:selector];if (target != nil) {SEL s = NSSelectorFromString(selector);IMP imp = [target methodForSelector:s];void (*func)(id, SEL,id) = (void *)imp;func(target, s, self);}}
}- (id)initWithLogTarget:(id)target action:(SEL)action
{self = [self initWithLogTarget:nil action:NULL];if (self) {[self addTarget:target action:action];}return self;
}- (NSString *)actionName {return objc_getAssociatedObject(self, monitorActionNameKey);
}- (void)setActionName:(NSString *)monitorActionName{objc_setAssociatedObject(self, monitorActionNameKey,monitorActionName,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}- (NSString *)senderAction {return objc_getAssociatedObject(self, KSenderAction);
}- (void)setSenderAction:(NSString *)senderAction{objc_setAssociatedObject(self, KSenderAction,senderAction,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}-(void)setTargetActionPair:(NSMapTable *)targetActionPair
{objc_setAssociatedObject(self, KTargetActionPair, targetActionPair, OBJC_ASSOCIATION_RETAIN);
}-(NSMapTable*)targetActionPair
{return objc_getAssociatedObject(self, KTargetActionPair);
}@end
http://www.dtcms.com/wzjs/616320.html

相关文章:

  • 最新某地方装修门户源码 php装饰公司程序 dede行业网站模板视频网站开发
  • 定制网站前准备网站seo策划方案设计
  • 网站关键词排名不稳定wordpress install.php 500
  • php做的网站收录百度官网首页官网
  • 广东手机网站建设哪家专业搜索引擎有哪些?
  • 推广网站怎么做能增加咨询做一个响应式网站价格
  • 做牛仔裤的小视频网站网站推广和精准seo
  • 网站建设系统改版wordpress 当前页面登录密码
  • 单页面网站制作教程做网站端口无法清除
  • 网站怎么制作视频教程做网站阿里云买哪个服务器好点
  • 网站静态和动态区别是什么华联股份股票
  • 邯郸做网站多少钱网站怎么做的支付宝
  • 网站制作的步骤男女做羞羞羞的事视频网站
  • 公司网站升级改版方案竞价移动网站
  • 那些网站反爬做的好电子商务平台定制开发
  • 专业做网站公司杯子网站开发方案模板
  • 和动物做的网站wordpress mip手机主题
  • 网站跳转微信链接线下推广小组所述的推广方案是针对哪两个团体
  • 企业整站网站模板下载wordpress vue 关系
  • 合肥环保公司网站建设品牌网球拍有哪些
  • 惠州品牌网站建设价格全国新农村建设网站
  • 如何做游戏渠道网站北京做seo的公司
  • 网站建设初学网站建设技术经费预算
  • 北京亦庄做网站公司盘多多网盘资源库
  • 网站主题有哪些内容app外包推广
  • c 网站开发需要什么网站建设定制开发服务
  • 广州贸易网站网页视频怎么下载到本地视频手机
  • 济南软月建站网站建设_微信开发
  • 网站设计目标与背景wordpress服务器选择
  • 智慧农业网站建设静态html转化wordpress主题