Files
2026-05-29 16:21:57 +08:00

1601 lines
62 KiB
Objective-C

//
// H5View.m
// TestGameWeb
//
// Created by Mac on 2024/1/30.
//
#import "H5View.h"
#import "CircularProgressBar.h"
#import <WebKit/WebKit.h>
#import "CustomView.h"
#import "UnityFramework.h"
#import <objc/runtime.h>
@implementation H5View{
// WKWebView * webview;
// WKWebView * webview_1;
NSMutableArray<WKWebView *> *webviews;
CircularProgressBar* bar; //奖励按钮进度条
UIView * flyBtn; //飞行奖励按钮节点,也可以用UIButton但要屏蔽事件
UIImageView* flyBg; //飞行奖励闪光背景
UIImageView* rewardBtn; //奖励按钮节点
NSTimer* updateTimer; //动效定时器
CGPoint points[4]; //飞行按钮飞行点位
NSInteger pointIndex; //当前飞行下标
BOOL canFly; //是否可飞行
CGPoint targetPoint; //飞行的下一个点
CGPoint delta; //飞行移动的delta
BOOL canCheckTouch; //加这个变量来防止检测点击事件出现多次
BOOL canCT; //点击是否可穿透
NSString* lastUrl; //记录上一次打开的url
BOOL inited; //当前view是否被初始化
CGPoint hitTestLocation; //hitest 点击的点
float bgAngle; //飞行按钮背景图的角度
BOOL is_first_btn; //是否是第一次生成网页按钮
int flyCtRate;//飞行按钮穿透概率
float stopTouchTime;
int otherH5switch; //是否自动刷h5界面
int H5Refreshtime; //h5刷新默认间隔时间
int Dailyrefreshtimes; //每天h5剩余刷新次数
UIScrollView *scrollView;
BOOL is_transparent;
BOOL dark_though;
NSMutableArray * dark_though_rate;
// float Dark_stopRefeshTime;
// float Dark_stopRefeshTime_1;
NSMutableArray *Dark_stopRefeshTimes;
NSMutableArray *dark_H5Refreshtime; //h5刷新默认间隔时间
NSMutableArray *dark_Dailyrefreshtimes; //每天h5剩余刷新次数
NSMutableArray *dark_url_array;
BOOL inH5ui;
NSMutableArray *light_url_array;
BOOL isClickProgress;
BOOL isClickFly;
int light_though_rate;
BOOL isShowFlyBtn;
BOOL isShowRewardBtn;
int isMultiView;
float top_;
float height_;
BOOL is_gift;
// int offset_y;
// int offset_y1;
NSMutableArray *offset_y;
// UITapGestureRecognizer *tapGesture;
// UITapGestureRecognizer *tapGesture_1;
BOOL in_game;
NSMutableArray *web_through_array;
NSString* webview_url;
NSString* webview_1_url;
NSMutableArray *ClickAddtime;
BOOL webview_IsCLickAd;
BOOL webview_1_IsCLickAd;
// float web_1_through_time;
// float web_2_through_time;
NSMutableArray<NSNumber *> *web_through_times;
// int dark_webview1_random_refresh_time;
// int dark_webview2_random_refresh_time;
NSMutableArray<NSNumber *> *dark_webview_random_refresh_times;
// float web_1_disable_time;
// float web_2_disable_time;
NSMutableArray<NSNumber *> *web_disable_times;
}
//单利模式
+(id) shared{
static H5View *view = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{view = [[self alloc] init];});
return view;
}
//初始化页面
-(void)initView{
if (inited)return;
[self initFlyBtn];
[self setHidden:YES]; //默认为隐藏状态
[self hideView];
canCheckTouch = true;
inited = true;
// Dark_stopRefeshTime=0;
// Dark_stopRefeshTime_1=0;
dark_though_rate= [NSMutableArray array];
dark_webview_random_refresh_times = [NSMutableArray array];
web_through_times= [NSMutableArray array];
web_disable_times= [NSMutableArray array];
Dark_stopRefeshTimes= [NSMutableArray array];
webviews= [NSMutableArray array];
offset_y=[NSMutableArray array];
// NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1
// target:self
// selector:@selector(timerAction:)
// userInfo:nil
// repeats:YES];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(timerAction:)
userInfo:nil
repeats:YES];
// 将 timer 添加到 NSRunLoopCommonModes 模式
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
CustomView *custom = [[CustomView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
custom.backgroundColor = [UIColor clearColor];
custom.userInteractionEnabled=YES;
[self.window.rootViewController.view addSubview:custom];
//
// UnityFramework *unityFramework = [UnityFramework getInstance];
// UnityAppController *appController = [unityFramework appController];
//
// // 获取 Unity 根节点视图
// UIView *unityRootView = [appController rootView];
// unityRootView.alpha=0.2;
}
-(void)initWebview:(int)type{
// NSLog(@"kkkkkkkkkkkkkkkkkkkkkk%d",type);
// if(type==2&&!isMultiView) return;
// if (webview != nil) { // 移除WebView的委托
// if(type==1){
// webview.navigationDelegate = nil;
//
// // 停止加载和清理缓存
// [webview stopLoading];
// [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
// [NSURLCache.sharedURLCache removeAllCachedResponses];
//
// // 从视图层次结构中移除WebView
// [webview removeFromSuperview];
// webview = nil;
// }
//
// }
if( webviews[type]!=nil){
webviews[type].navigationDelegate = nil;
// 停止加载和清理缓存
[webviews[type] stopLoading];
[webviews[type] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[NSURLCache.sharedURLCache removeAllCachedResponses];
// 从视图层次结构中移除WebView
[webviews[type] removeFromSuperview];
webviews[type] = [NSNull null];
//webviews[type] = nil;
}
// [webviews removeObjectAtIndex:type];
// if (webview_1 != nil) {
// // 移除WebView的委托
// if(type==2){
// webview_1.navigationDelegate = nil;
//
// // 停止加载和清理缓存
// [webview_1 stopLoading];
// [webview_1 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
// [NSURLCache.sharedURLCache removeAllCachedResponses];
//
// // 从视图层次结构中移除WebView
// [webview_1 removeFromSuperview];
// webview_1 = nil;
// }
//
// }
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
if(is_transparent){
webViewConfiguration.allowsInlineMediaPlayback = YES;
webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
NSString *css = @"body { -webkit-user-select: none; user-select: none; }";
NSString *jsCSS = [NSString stringWithFormat:
@"var style = document.createElement('style'); "
"style.innerHTML = '%@'; "
"document.head.appendChild(style);", css];
NSString *js =
@"(function() { "
// 禁用所有表单元素
"var elements = document.querySelectorAll('input, textarea, select'); "
"elements.forEach(function(element) { "
" element.disabled = true; "
" element.setAttribute('readonly', 'true'); "
"}); "
// 拦截 focus,强制失焦,防止输入法弹出
"document.addEventListener('focusin', function(event) { "
" if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA' || event.target.tagName === 'SELECT') { "
" event.target.blur(); "
" } "
"}); "
// 禁用所有音频和视频
"document.querySelectorAll('audio, video').forEach(function(el) { "
" el.muted = true; "
" el.pause(); "
"}); "
// 处理触摸事件,阻止广告类元素的触摸
"document.addEventListener('touchstart', function(event) { "
" const target = event.target; "
" if (target.matches('.ad-class') || target.closest('.ad-class')) { "
" setTimeout(function() { "
" const touchCancelEvent = new TouchEvent('touchcancel', { "
" bubbles: true, "
" cancelable: true, "
" touches: [], "
" targetTouches: [], "
" changedTouches: event.changedTouches, "
" shiftKey: event.shiftKey "
" }); "
" target.dispatchEvent(touchCancelEvent); "
" }, 1000); "
" event.preventDefault(); "
" } "
"}, { passive: false }); "
// 监控 DOM 变化,禁用新插入的输入框
"new MutationObserver(function(mutations) { "
" mutations.forEach(function(mutation) { "
" mutation.addedNodes.forEach(function(node) { "
" if (node.tagName === 'INPUT' || node.tagName === 'TEXTAREA' || node.tagName === 'SELECT') { "
" node.disabled = true; "
" node.setAttribute('readonly', 'true'); "
" node.blur(); "
" } "
" }); "
" }); "
"}).observe(document.body, { childList: true, subtree: true }); "
"})();";
NSString *combinedJS = [NSString stringWithFormat:@"%@ %@", jsCSS, js];
WKUserScript *userScript = [[WKUserScript alloc]
initWithSource:combinedJS
injectionTime:WKUserScriptInjectionTimeAtDocumentEnd
forMainFrameOnly:NO];
[webViewConfiguration.userContentController addUserScript:userScript];
}
// if(type==1) {
// webview = [[WKWebView alloc] initWithFrame:self.frame configuration:webViewConfiguration];
// [self addSubview:webview];
// webview.allowsLinkPreview = NO;
// [self insertSubview:webview atIndex:0];
// // webview .alpha=0.5;
// }
webviews[type] = [[WKWebView alloc] initWithFrame:self.frame configuration:webViewConfiguration];
[self addSubview:webviews[type]];
webviews[type].allowsLinkPreview = NO;
[self insertSubview:webviews[type] atIndex:0];
// webviews[type] .alpha=0.5;
// if(type==2){
// webview_1 = [[WKWebView alloc] initWithFrame:self.frame configuration:webViewConfiguration];
// [self addSubview:webview_1];
// webview_1.allowsLinkPreview = NO;
// [self insertSubview:webview_1 atIndex:0];
// }
for (NSInteger i = 0; i < webviews.count; i++) {
webviews[i].navigationDelegate=self;
webviews[i].UIDelegate = self;
}
// webviews[type].navigationDelegate=self;
// webview_1.navigationDelegate=self;
// webview.tag = 1;
// webview_1.tag = 2;
// webviews[type].UIDelegate=self;
// webview_1.UIDelegate=self;
// 将WebView添加到当前视图的最后面
// [self insertSubview:webview atIndex:0];
// 将WebView添加到当前视图的最后面
//[self insertSubview:webview_1 atIndex:1];
// if (webview.superview == nil)
//
[self ChangeViewRect:!is_transparent];
// [self showWebview:@"https://baidu.com"];
}
//- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
// // NSLog(@"pppppppppppppppppJavaScript 点击了链接: ");
// if ([message.name isEqualToString:@"linkClicked"]) {
// NSString *urlString = message.body;
//
//
// // 在这里处理链接点击,例如加载链接
// NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
// [webview loadRequest:request];
// }
//}
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
if (!navigationAction.targetFrame.isMainFrame) {
[webView loadRequest:navigationAction.request];
}
return nil;
}
//当前view的显/隐
-(void)showView:(BOOL)show{
if (!show){
[self hideView];
}else{
//[self setHidden:NO];
// NSLog(@"xianshimingchuantouuuuuuuuuuuuuu1----%d", inH5ui);
if(!inH5ui) return;
// NSLog(@"xianshimingchuantouuuuuuuuuuuuuu2----%d", show);
if(is_transparent){
webviews[0].hidden=YES;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@""] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
[webviews[0] loadRequest:request];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayShowH5) object:nil];
[self performSelector:@selector(delayShowH5) withObject:nil afterDelay:1.5];
}
[self.superview bringSubviewToFront:self];
is_transparent=NO;
if (isShowRewardBtn) {
[rewardBtn setHidden:NO];
} else {
[rewardBtn setHidden:YES];
}
[self showWebview:lastUrl]; //打开webview时url为上一次
[self ChangeViewRect:true];
[self startFlyAnim]; //每一次显示时强行执行飞行按钮的动画
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
self .alpha=1;
}
}
}
//隐藏view
-(void)hideView{
[self stopUpdate];
if(!is_transparent){
// webview.hidden=YES;
// webview_1.hidden=YES;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@""] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
// [webview loadRequest:request];
// [webview_1 loadRequest:request];
for (NSInteger i = 0; i < webviews.count; i++) {
webviews[i].hidden = YES;
[ webviews[i] loadRequest:request];
}
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayShowH5) object:nil];
[self performSelector:@selector(delayShowH5) withObject:nil afterDelay:0.5];
}
is_transparent=YES;
[self.superview sendSubviewToBack:self];
self.userInteractionEnabled=TRUE;
[flyBtn setHidden:YES];
[rewardBtn setHidden:YES];
// Dark_stopRefeshTime=0;
// Dark_stopRefeshTime_1=0;
for (NSInteger i = 0; i < Dark_stopRefeshTimes.count; i++) {
Dark_stopRefeshTimes[i]=@(0);
}
for (NSInteger i = 0; i < webviews.count; i++) {
[self showDarkWebview:i];
}
// [self showDarkWebview:1];
// [self showDarkWebview:2];
[self ChangeViewRect:false];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
self .alpha=0;
}
}
-(void)delayShowH5{
// webview.hidden=NO;
// webview_1.hidden=NO;
for (NSInteger i = 0; i < webviews.count; i++) {
webviews[i].hidden=NO;
}
}
-(void)setInH5View:(BOOL)flag{
// NSLog(@"aaaaaaaaaaaaaaaaaa%d",flag);
inH5ui=flag;
}
-(void)upDataH5times:(char*)weblink times:(int)times is_dark:(BOOL)is_dark{
NSString *myNSString = [[NSString alloc] initWithUTF8String:weblink];
if(is_dark){
for (int counter = 0; counter < dark_url_array.count; counter++) {
if( [dark_url_array[counter][0] isEqualToString:myNSString]){
dark_url_array[counter][2]=@(times);
dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
break;
}
}
}
else{
for (int counter = 0; counter < light_url_array.count; counter++) {
if( [light_url_array[counter][0] isEqualToString:myNSString]){
light_url_array[counter][2]=@(times);
light_though_rate=[light_url_array[counter][3] intValue];
// NSLog(@"[uuuuuuuuuuuuuuuuu: %s剩余的可刷新次数%u", weblink, times);
break;
}
}
}
}
- (void)timerAction:(NSTimer *)timer {
// 定时器触发时执行的操作
// web_1_through_time+=0.1;
// web_2_through_time+=0.1;
for (NSUInteger i = 0; i < web_through_times.count; i++) {
web_through_times[i] = @([web_through_times[i] floatValue] + 0.1f);
// NSLog(@"[uuuuuuuuuuuuuuuuu未穿透时间: %f",[web_through_times[i] floatValue]);
}
stopTouchTime+=0.1;
for (NSInteger i = 0; i < Dark_stopRefeshTimes.count; i++) {
Dark_stopRefeshTimes[i]=@([Dark_stopRefeshTimes[i ] floatValue ] +0.1f);
}
// Dark_stopRefeshTime+=0.1;
// Dark_stopRefeshTime_1+=0.1;
if(is_transparent){
for(NSUInteger i=0;i<webviews.count;i++){
if([dark_Dailyrefreshtimes[i] intValue]>0&&[Dark_stopRefeshTimes[i] floatValue]>[dark_webview_random_refresh_times[i]intValue]){
dark_Dailyrefreshtimes[i]=@([dark_Dailyrefreshtimes[i] intValue]-1);
// UnitySendMessage("WebviewManager", "H5AutoRefresh","dark_Dailyrefreshtimes|"+i );
NSString *msg = [NSString stringWithFormat:@"dark_Dailyrefreshtimes|%d", i];
UnitySendMessage("WebviewManager", "H5AutoRefresh", [msg UTF8String]);
Dark_stopRefeshTimes[i]=@(0);
dark_webview_random_refresh_times[i]=@([dark_H5Refreshtime[i*2] intValue] + arc4random_uniform([dark_H5Refreshtime[i*2+1] intValue] - [dark_H5Refreshtime[i*2] intValue] + 1));
// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_webview_random_refresh_times[0] intValue]);
//
[self showDarkWebview:i];
[self ChangeViewRect:false];
}
}
// if([dark_Dailyrefreshtimes[0]intValue]>0&&Dark_stopRefeshTime>[dark_webview_random_refresh_times [0]intValue]){
// dark_Dailyrefreshtimes[0]=@([dark_Dailyrefreshtimes[0] intValue]-1);
// UnitySendMessage("WebviewManager", "H5AutoRefresh","dark_Dailyrefreshtimes|0" );
// Dark_stopRefeshTime=0;
// dark_webview_random_refresh_times[0]=@([dark_H5Refreshtime[0] intValue] + arc4random_uniform([dark_H5Refreshtime[1] intValue] - [dark_H5Refreshtime[0] intValue] + 1));
// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_webview_random_refresh_times[0] intValue]);
//
// [self showDarkWebview:0];
// [self ChangeViewRect:false];
// }
//
// if([dark_Dailyrefreshtimes[1] intValue]>0&&Dark_stopRefeshTime_1>[dark_webview_random_refresh_times [1]intValue]){
// dark_Dailyrefreshtimes[1]=@([dark_Dailyrefreshtimes[1] intValue]-1);
// UnitySendMessage("WebviewManager", "H5AutoRefresh","dark_Dailyrefreshtimes|1" );
// Dark_stopRefeshTime_1=0;
// dark_webview_random_refresh_times[1]=@([dark_H5Refreshtime[2] intValue] + arc4random_uniform([dark_H5Refreshtime[3] intValue] - [dark_H5Refreshtime[2] intValue] + 1));
// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_webview_random_refresh_times[1] intValue]);
// [self showDarkWebview:1];
// [self ChangeViewRect:false];
// }
}
else{
if(otherH5switch!=1 ) return;
if(Dailyrefreshtimes<=0 ) return;
if(stopTouchTime>H5Refreshtime){
UnitySendMessage("WebviewManager", "H5AutoRefresh","Dailyrefreshtimes" );
[self showWebview:lastUrl];
[self ChangeViewRect:true];
stopTouchTime=0;
Dailyrefreshtimes--;
}
}
}
// 处理网页开始加载
//- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
// NSLog(@"WebView with tag %ld started loading", (long)webView.tag);
// [self injectJavaScriptIntoWebView:webView]; // 在开始加载时重新注入 JavaScript
//}
//
//// 处理网页加载完成
//- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
// NSLog(@"WebView with tag %ld finished loading", (long)webView.tag);
// [self injectJavaScriptIntoWebView:webView]; // 在加载完成时重新注入 JavaScript
//}
- (void)yourMethodToCall {
if(!is_transparent) {
webviews[0].hidden=NO;
}
}
//显示webview
-(void)showWebview:(NSString*)url{
if (is_transparent) return; //view在隐藏状态下不显示webview,因为目前只需要处理明webview 的显示。
// NSLog(@"xianshimingchuantouuuuuuuuuuuuuu3----%d");
[self initWebview:0];
float maxvalue=0;
for (int counter = 0; counter < light_url_array.count; counter++) {
if([light_url_array[counter][2] intValue]>0 ){
maxvalue+=[light_url_array[counter][1] floatValue];
}
}
float random3 ;
float rate=0;
if(maxvalue>0){
random3=arc4random_uniform(maxvalue);
for (int counter = 0; counter < light_url_array.count; counter++) {
if([light_url_array[counter][2] intValue]==0) continue;
float myFloat = [light_url_array[counter][1] floatValue];
light_though_rate=[light_url_array[counter][3] intValue];
rate+=myFloat;
if(random3<=rate){
url=light_url_array[counter][0];
light_url_array[counter][2]=@([light_url_array[counter][2] floatValue]-1);
break;
}
}
}
else{
random3=arc4random_uniform(100);
for (int counter = 0; counter < light_url_array.count; counter++) {
float myFloat = [light_url_array[counter][1] floatValue];
light_though_rate=[light_url_array[counter][3] intValue];
rate+=myFloat;
if(random3<=rate){
url=light_url_array[counter][0];
break;
}
}
}
// NSLog(@"xianshimingchuantouuuuuuuuuuuuuu3----%@",url);
UnitySendMessage("WebviewManager", "SendH5Event", "test");
stopTouchTime=0;
//@"https://tool.lu/timestamp/?ivk_sa=1023231z"@"https://fanyi.baidu.com/
if(url.length!=0) webview_url=url;
else return;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] ];
[webviews[0] loadRequest:request];
webview_IsCLickAd=YES;
if (webviews[0].superview == nil)
[self insertSubview:webviews[0] atIndex:0];
UnitySendMessage("WebviewManager", "H5AutoRefresh",[[url stringByAppendingString:@"|h5"] UTF8String]);
}
-(void)showDarkWebview:(int)type{
if(!is_gift) return;
[self initWebview:type];
NSString* url=@"";
UnitySendMessage("WebviewManager", "SendH5Event", "test");
float maxvalue=0;
float random3 ;
float rate=0;
for (int counter = 0; counter < dark_url_array.count; counter++) {
if([dark_url_array[counter][2] intValue]>0 ){
if([dark_url_array[counter][4] intValue]!=(type+1) ) continue;
maxvalue+=[dark_url_array[counter][1] floatValue];
}
}
if(maxvalue>0){
random3=arc4random_uniform(maxvalue);
for (int counter = 0; counter < dark_url_array.count; counter++) {
if([dark_url_array[counter][2] intValue]<=0) continue;
if([dark_url_array[counter][4] intValue]!=(type+1) ) continue;
float myFloat = [dark_url_array[counter][1] floatValue];
dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
rate+=myFloat;
if(random3<=rate){
url=dark_url_array[counter][0];
dark_url_array[counter][2]=@([dark_url_array[counter][2] floatValue]-1);
break;
}
}
}
else{
random3=arc4random_uniform(100);
for (int counter = 0; counter < dark_url_array.count; counter++) {
if([dark_url_array[counter][4] intValue]!=(type+1) ) continue;
float myFloat = [dark_url_array[counter][1] floatValue];
dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
rate+=myFloat;
if(random3<=rate){
url=dark_url_array[counter][0];
break;
}
}
}
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
if(url.length!=0) webview_url=url;
else return;
// NSLog(@"33333333333333333%@",url);
webview_IsCLickAd=NO;
[webviews[type] loadRequest:request];
//
// if(type==1){
//
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][2] intValue]>0 ){
// if([dark_url_array[counter][4] intValue]!=1 ) continue;
// maxvalue+=[dark_url_array[counter][1] floatValue];
// }
//
// }
//
// if(maxvalue>0){
// random3=arc4random_uniform(maxvalue);
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][2] intValue]<=0) continue;
// if([dark_url_array[counter][4] intValue]!=1 ) continue;
// float myFloat = [dark_url_array[counter][1] floatValue];
// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
// rate+=myFloat;
// if(random3<=rate){
// url=dark_url_array[counter][0];
// dark_url_array[counter][2]=@([dark_url_array[counter][2] floatValue]-1);
// break;
// }
// }
// }
// else{
// random3=arc4random_uniform(100);
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][4] intValue]!=1 ) continue;
// float myFloat = [dark_url_array[counter][1] floatValue];
// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
// rate+=myFloat;
// if(random3<=rate){
// url=dark_url_array[counter][0];
// break;
// }
// }
// }
// NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
// if(url.length!=0) webview_url=url;
// else return;
// // NSLog(@"33333333333333333%@",url);
// webview_IsCLickAd=NO;
// [webview loadRequest:request];
//
//
//
// }
// else if(type==2){
// // if(!isMultiView) return;
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][2] intValue]>0 ){
// if([dark_url_array[counter][4] intValue]!=2 ) continue;
// maxvalue+=[dark_url_array[counter][1] floatValue];
// }
//
// }
//
// rate=0;
// if(maxvalue>0){
// random3=arc4random_uniform(maxvalue);
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][2] intValue]<=0) continue;
// if([dark_url_array[counter][4] intValue]!=2 ) continue;
// float myFloat = [dark_url_array[counter][1] floatValue];
// // dark_though_rate=[dark_url_array[counter][3] intValue];
// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
// rate+=myFloat;
// if(random3<=rate){
// url=dark_url_array[counter][0];
// dark_url_array[counter][2]=@([dark_url_array[counter][2] floatValue]-1);
// break;
// }
// }
// }
// else{
// random3=arc4random_uniform(100);
// for (int counter = 0; counter < dark_url_array.count; counter++) {
// if([dark_url_array[counter][4] intValue]!=2 ) continue;
// float myFloat = [dark_url_array[counter][1] floatValue];
// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]);
// rate+=myFloat;
// if(random3<=rate){
// url=dark_url_array[counter][0];
// break;
// }
// }
// }
//
//
// if(url.length!=0) webview_1_url=url;
// else return;
// NSMutableURLRequest *request_1 = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] ];
// webview_1_IsCLickAd=NO;
// [webview_1 loadRequest:request_1];
// // NSLog(@"333333333333333331%@",url);
// }
UnitySendMessage("WebviewManager", "H5AutoRefresh",[[url stringByAppendingString:@"|h6"] UTF8String]);
}
//隐藏webview
-(void)hideWebview{
[webviews[0] removeFromSuperview];
}
//设置飞行进度条进度
-(void)setIconProgress:(float)value{
[bar setProgress:value];
// NSLog(@"bbbbbbbbbbbbbbbbbbbbb%f",value);
if(value>=1){
UnitySendMessage("WebviewManager", "TouchClickPoint", "finish");
}
}
//初始化飞行按钮
-(void)initFlyBtn{
flyBtn = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self addSubview:flyBtn];
//飞行闪光底图
flyBg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"7"]];
flyBg.frame = CGRectMake(0, 0, 100, 100);
[flyBtn addSubview:flyBg];
[flyBtn setUserInteractionEnabled:NO];
UIImageView* icon = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"3"]];
icon.frame = CGRectMake(30, 30, 139*0.35, 97*0.35);
[flyBtn addSubview:icon];
//飞行点位
float sw = self.frame.size.width;
float sh = self.frame.size.height;
points[0] = CGPointMake(sw * 0.5,0);
points[1] = CGPointMake(-20,sh * 0.25);
points[2] = CGPointMake(sw - flyBtn.frame.size.width+20,sh * 0.5);
points[3] = CGPointMake(-20,sh - 220);
}
//执行飞行按钮的动画
-(void)startFlyAnim{
if (!isShowFlyBtn) {
flyBtn.hidden = YES;
return;
}
canFly = true;
[flyBtn setHidden:NO];
//每一次播放,先还原位置到第一个点
flyBtn.transform = CGAffineTransformMakeTranslation(points[0].x, points[0].y);
pointIndex = 0;
[self flyAnim];
// float random3 = arc4random_uniform(100) ;
// if(random3<flyCtRate){
// [flyBtn setUserInteractionEnabled:NO];
// }
// else {
// [flyBtn setUserInteractionEnabled:YES];
// }
}
//停止飞行按钮的动画
-(void)stopFlyAnim{
canFly = false;
[self stopUpdate];
[flyBtn setHidden:YES];
}
//飞行动画逻辑
-(void)flyAnim{
if (!canFly) return;
int pointsLen = sizeof(points)/ sizeof(points[0]);
pointIndex = ++pointIndex % pointsLen;
targetPoint = points[pointIndex];
//NSLog(@"pointIndex: %ld", (long)pointIndex);
[flyBtn setHidden:NO];
if (updateTimer == nil){
updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(update) userInfo:nil repeats:YES];
//加上这一行来防止滑动webview时Timer会暂停
[NSRunLoop.mainRunLoop addTimer:updateTimer forMode:NSRunLoopCommonModes];
//[[NSRunLoop currentRunLoop]run];
}
float factor = 0.006; //飞行速度的值
delta = CGPointMake((targetPoint.x - flyBtn.frame.origin.x) * factor, (targetPoint.y - flyBtn.frame.origin.y) * factor);
}
//停止Timer的update
-(void)stopUpdate{
// while (updateTimer.valid && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]);
if (updateTimer != nil){
[updateTimer invalidate];
updateTimer = nil;
}
}
//更新逻辑
-(void)update{
if ([self CGPointDistance:flyBtn.frame.origin to:targetPoint] < 2){ //按钮移动的距离小于目标的n值来判断是否达到目标点
[self flyAnim]; //递归飞往下一个点
return;
}
flyBtn.transform = CGAffineTransformMakeTranslation(flyBtn.frame.origin.x + delta.x, flyBtn.frame.origin.y + delta.y);
bgAngle = bgAngle + 0.03; //飞行动画旋转速度
flyBg.transform = CGAffineTransformMakeRotation(bgAngle);
}
//计算两个点之间的算法
-(CGFloat) CGPointDistanceSquared:(CGPoint)from to: (CGPoint)to{
return (from.x - to.x) * (from.x - to.x) + (from.y - to.y) * (from.y - to.y);
}
//计算两个点之间的算法
-(CGFloat) CGPointDistance:(CGPoint)from to: (CGPoint)to{
return sqrt([self CGPointDistanceSquared:from to:to]);
}
//- (void)handleTap:(UITapGestureRecognizer *)sender {
// CGPoint location = [sender locationInView:webview];
// NSLog(@"Tap detected at location: %@", NSStringFromCGPoint(location));
//
// // 模拟点击事件传递给第二个 WKWebView
// NSString *js = [NSString stringWithFormat:@"\
// var element = document.elementFromPoint(%f, %f);\
// if (element) {\
// var elementType = element.tagName.toLowerCase();\
// var elementName = element.getAttribute('id') || element.getAttribute('class') || 'no-name';\
// console.log('Element info: ' + elementType + ' ' + elementName);\
// var events = ['mousedown', 'mouseup', 'click'];\
// events.forEach(function(eventType) {\
// var event = new MouseEvent(eventType, {\
// bubbles: true,\
// cancelable: true,\
// view: window,\
// clientX: %f,\
// clientY: %f\
// });\
// element.dispatchEvent(event);\
// });\
// elementType + ' ' + elementName;\
// } else {\
// 'no-element';\
// }\
// ", location.x, location.y, location.x, location.y];
//
// [webview evaluateJavaScript:js completionHandler:^(id result, NSError *error) {
// if (error) {
// // NSLog(@"Error simulating mouse events111111111: %@", error);
// } else {
// // NSLog(@"Element info111111111: %@",result);
////
// // 判断 result 是否包含 iframe 字符串
// if ([result isKindOfClass:[NSString class]] && [(NSString *)result containsString:@"iframe"]) {
// // NSLog(@"Result contains 'iframe' string");
// if(self->is_transparent) {
// // NSLog(@"Element info11111111122223333: %d", Dark_stopRefeshTime);
// UnitySendMessage("WebviewManager", "ClickAdEvent", [[webview_url stringByAppendingString:@"|h6"] UTF8String]);
// // Dark_stopRefeshTime-=[ClickAddtime[0] intValue];
// if(!webview_IsCLickAd) Dark_stopRefeshTime-= [self randomValueBetween];
// webview_IsCLickAd=YES;
// // NSLog(@"Element info11111111122223333: %d", Dark_stopRefeshTime);
// }
// else {
// UnitySendMessage("WebviewManager", "ClickAdEvent", [[webview_url stringByAppendingString:@"|h5"] UTF8String]);
// }
//
// }
//// else {
//// NSLog(@"Result does not contain 'iframe' string");
//// }
// }
// }];
//}
- (int)randomValueBetween{
int lowerBound =[ClickAddtime[0] intValue];
int upperBound =[ClickAddtime[1] intValue];
return lowerBound + arc4random_uniform((upperBound - lowerBound + 1));
}
//- (void)handleTap_1:(UITapGestureRecognizer *)sender {
// CGPoint location = [sender locationInView:webview_1];
// NSLog(@"Tap detected at location: %@", NSStringFromCGPoint(location));
//
// // 模拟点击事件传递给第二个 WKWebView
// NSString *js = [NSString stringWithFormat:@"\
// var element = document.elementFromPoint(%f, %f);\
// if (element) {\
// var elementType = element.tagName.toLowerCase();\
// var elementName = element.getAttribute('id') || element.getAttribute('class') || 'no-name';\
// console.log('Element info: ' + elementType + ' ' + elementName);\
// var events = ['mousedown', 'mouseup', 'click'];\
// events.forEach(function(eventType) {\
// var event = new MouseEvent(eventType, {\
// bubbles: true,\
// cancelable: true,\
// view: window,\
// clientX: %f,\
// clientY: %f\
// });\
// element.dispatchEvent(event);\
// });\
// elementType + ' ' + elementName;\
// } else {\
// 'no-element';\
// }\
// ", location.x, location.y, location.x, location.y];
//
// [webview_1 evaluateJavaScript:js completionHandler:^(id result, NSError *error) {
// if (error) {
// // NSLog(@"Error simulating mouse events1111111112222: %@", error);
// } else {
// // NSLog(@"Element info1111111112222: %@", result);
//
// // 判断 result 是否包含 iframe 字符串
// if ([result isKindOfClass:[NSString class]] && [(NSString *)result containsString:@"iframe"]) {
//
// // NSLog(@"Element info11111111122223333: %d", Dark_stopRefeshTime_1);
// UnitySendMessage("WebviewManager", "ClickAdEvent", [[webview_1_url stringByAppendingString:@"|h6"] UTF8String]);
// if(!webview_1_IsCLickAd) Dark_stopRefeshTime_1-=[self randomValueBetween];
// webview_1_IsCLickAd=YES;
// // NSLog(@"Element info11111111122223333: %d", Dark_stopRefeshTime_1);
// }
// // else {
// // NSLog(@"Result does not contain 'iframe' string");
// // }
// }
// }];
//}
//hitTest 能在不接受点击事件的view也能捕获多点位的信息
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
hitTestLocation = point;
// NSLog(@"Hit point11111110 x: %f, y:%f", hitTestLocation.x, hitTestLocation.y);
// if(inH5ui&& hitTestLocation.y<100){
// hitTestLocation.y+=66;
// }
//
if (canCheckTouch&&is_gift){
//NSLog(@"Hit point11111112 x: %f, y:%f", hitTestLocation.x, hitTestLocation.y);
[self checkPointInsideBtn:hitTestLocation];
[self delayInvoke:0.3 cb:^(void){ self->canCheckTouch = YES; }];//加个定时器来防止出发多次检测点击
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
// 获取屏幕高度
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
NSString *jsCode = [NSString stringWithFormat:@"%f|%f",hitTestLocation.x/screenWidth, hitTestLocation.y/screenHeight];
if (dark_though){
// NSLog(@"Hit point1111113 x: %f, y:%f", hitTestLocation.x, hitTestLocation.y);
UnitySendMessage("WebviewManager", "TouchClickPoint",[jsCode UTF8String]);
}
}
canCheckTouch = false;
// if(is_transparent&&dark_though){
// if(point.y>self.frame.size.height){
// point.y-=top_;
// }
// }
// if(tapGesture==nil) {
// tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
//
// tapGesture_1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap_1:)];
//
// }
UIView* touchedView;
int click_web=0;
if(!dark_though||!is_gift){
touchedView=[super hitTest:point withEvent:event];
}
else{
// NSLog(@"[ggggggggggggggggggg21: %@剩余的可刷新次数", web_through_array[0]);
// NSLog(@"[ggggggggggggggggggg21: %@剩余的可刷新次数", web_through_array[1]);
//
// NSLog(@"[ggggggggggggggggggg21:");
float random_ = arc4random_uniform(100) ;
int add_value=0;
// random_=0;//zhushi
if(!is_transparent){
touchedView=[webviews[0] hitTest:point withEvent:event];
}
else{
for(NSUInteger i=0;i<web_through_array.count;i++){
if(random_<add_value+[web_through_array[i] intValue]){
// NSLog(@"[ggggggggggggggggggg21: %lu webviews的长度", (unsigned long)webviews.count);
touchedView=[webviews[i] hitTest:point withEvent:event];
click_web=i;
break;
}
else add_value+=[web_through_array[i] intValue];
}
}
//
// if(!is_transparent|| random_<[web_through_array[0] intValue]){
// // if(true){
//
// touchedView=[webview hitTest:point withEvent:event];
// // tapGesture.delegate=touchedView;
// // [touchedView addGestureRecognizer:tapGesture];
// }
// else {
// touchedView=[webview_1 hitTest:point withEvent:event];
// click_web=2;//quxiaozhushi
// // tapGesture_1.delegate=touchedView;
// // [touchedView addGestureRecognizer:tapGesture_1];
// }
}
// [self.webView2 addGestureRecognizer:tapGesture];
if(!is_gift){
return nil;
}
else if(is_transparent&&dark_though){//暗穿透
float random3 = arc4random_uniform(100) ;
// NSLog(@"eeeeeeeeeeeeeeeeeee%i",dark_though_rate);
// random3=0;//zhushi
// NSLog(@"Point coordinates: max = %f,",self.bounds.size.width);
if(isMultiView>1)
{
if(random3< [dark_though_rate[click_web] intValue]){
// NSLog(@"触发点击:%f",web_1_through_time);
// NSLog(@"eeeeeeeeeeeeeeeeeee:%f",web_1_disable_time);
if ([web_through_times[click_web] floatValue] < 0) {
// NSLog(@"触发点击,时间小于0:%f",web_1_through_time);
return touchedView;
}
else if([web_through_times[click_web] floatValue] <[web_disable_times[click_web] floatValue] ){
// NSLog(@"触发点击,时间小于停用时间:%f",web_1_through_time);
// webview.userInteractionEnabled = NO;
// [self delayInvoke:0.2 cb:^(void){ webview.userInteractionEnabled = YES; }];
return nil;
}
else {
// web_1_disable_time=[ClickAddtime[0] floatValue] + ([ClickAddtime[1] floatValue] - [ClickAddtime[0] floatValue]) * drand48();
web_disable_times[click_web]=@([ClickAddtime[click_web] floatValue]);
web_through_times[click_web] =@(-0.05);
// NSLog(@"触发点击,时间设置为-0.5:%f",web_1_through_time);
return touchedView;
}
}
else return nil;
// if(click_web==1){
// if(random3< [dark_though_rate[0] intValue]){
// // NSLog(@"触发点击:%f",web_1_through_time);
// // NSLog(@"eeeeeeeeeeeeeeeeeee:%f",web_1_disable_time);
// if(web_1_through_time<0){
// // NSLog(@"触发点击,时间小于0:%f",web_1_through_time);
// return touchedView;
// }
// else if(web_1_through_time<web_1_disable_time){
// // NSLog(@"触发点击,时间小于停用时间:%f",web_1_through_time);
// // webview.userInteractionEnabled = NO;
// // [self delayInvoke:0.2 cb:^(void){ webview.userInteractionEnabled = YES; }];
//
// return nil;
// }
// else {
// // web_1_disable_time=[ClickAddtime[0] floatValue] + ([ClickAddtime[1] floatValue] - [ClickAddtime[0] floatValue]) * drand48();
// web_1_disable_time=[ClickAddtime[0] floatValue];
// web_1_through_time=-0.05;
// // NSLog(@"触发点击,时间设置为-0.5:%f",web_1_through_time);
// return touchedView;
// }
// }
// else return nil;
// }
// else{
// if(random3< [dark_though_rate[1] intValue]){
// if(web_2_through_time<0){
// return touchedView;
// }
// if(web_2_through_time<web_2_disable_time)return nil;
// else {
// // web_2_disable_time=[ClickAddtime[0] floatValue] + ([ClickAddtime[1] floatValue] - [ClickAddtime[0] floatValue]) * drand48();
// web_2_disable_time=[ClickAddtime[1] floatValue] ;
// web_2_through_time=-0.1;
// return touchedView;
// }
// }
// else return nil;
// }
}
else{
// if(random3< [dark_though_rate[0] intValue]){
// return touchedView;
// }
// else return nil;
if(random3< [dark_though_rate[0] intValue]){
if([web_through_times[0] floatValue]<0){
return touchedView;
}
if([web_through_times[0] floatValue]<[web_disable_times[0] floatValue])return nil;
else {
web_disable_times[0]=@([ClickAddtime[0] floatValue]);
// web_1_through_time=-0.1;
web_through_times[0]=@(-0.05);
return touchedView;
}
}
else return nil;
}
}
else if(isClickProgress&&!is_transparent){//明穿透,点击能量环时
float random3 = arc4random_uniform(100) ;
//NSLog(@"eeeeeeeeeeeeeeeeeee%i",light_though_rate);
if(random3< light_though_rate){
return touchedView;
}
else return nil;
}
else if(isClickFly&&!is_transparent){
float random3 = arc4random_uniform(100) ;
// NSLog(@"eeeeeeeeeeeeeeeeeee%i",light_though_rate);
if(random3< flyCtRate){
return touchedView;
}
else return nil;
}
else return touchedView;
}
//设置全屏
-(void)setFullScreen{
self.frame = self.bounds;
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if (navigationAction.navigationType == WKNavigationTypeLinkActivated && !navigationAction.targetFrame.isMainFrame) {
decisionHandler(WKNavigationActionPolicyCancel);
[webView loadRequest:navigationAction.request];
} else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}
- (void)addH5Field:(int)field1 field2:(int)field2 field3:(int)field3 field4:(int)field4 field5:(int)field5 field6:(char* )darkWVRefreshtime_str field7:(char* )darkWVDailyrefreshtimes_str dark_url:(char*)dark_url light_url:(char*)light_url field8:(BOOL )field8 web_through_probability:(char*)web_through_probability click_add_time:(char*)click_add_time{
// 在这里实现方法
flyCtRate=field1;//飞行道具的穿透概率
otherH5switch=field2;
H5Refreshtime=field3;
Dailyrefreshtimes=field4;
is_gift=field8;
//dark_though_rate=field5;
// dark_H5Refreshtime=field6;
// dark_Dailyrefreshtimes=field7;
// NSLog(@"[ggggggggggggggggggg21: %@剩余的可刷新次数", dark_H5Refreshtime[0]);
if(strlen(darkWVRefreshtime_str) != 0){
// NSString *objcString = [NSString stringWithUTF8String:darkWVRefreshtime_str];
// NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
// //NSLog(@"hhhhhhhhhhhh%@",objcString);
// NSMutableArray *intArray = [NSMutableArray array];
//
// for (NSString *str in stringArray) {
// [intArray addObject:@([str intValue])];
// }
//
// dark_H5Refreshtime=intArray;
// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_H5Refreshtime[0] intValue]);
// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_H5Refreshtime[1] intValue]);
// dark_webview1_random_refresh_time=[dark_H5Refreshtime[0] intValue] + arc4random_uniform([dark_H5Refreshtime[1] intValue] - [dark_H5Refreshtime[0] intValue] + 1);
// dark_webview2_random_refresh_time=[dark_H5Refreshtime[2] intValue] + arc4random_uniform([dark_H5Refreshtime[3] intValue] - [dark_H5Refreshtime[2] intValue] + 1);
//
if (strlen(darkWVRefreshtime_str) != 0) {
NSString *objcString = [NSString stringWithUTF8String:darkWVRefreshtime_str];
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
NSMutableArray *intArray = [NSMutableArray array];
for (NSString *str in stringArray) {
[intArray addObject:@([str intValue])];
}
dark_H5Refreshtime = intArray;
// 每两个元素表示一个区间 [low, high]
for (NSInteger i = 0; i + 1 < dark_H5Refreshtime.count; i += 2) {
int low = [dark_H5Refreshtime[i] intValue];
int high = [dark_H5Refreshtime[i+1] intValue];
int randomValue = low + arc4random_uniform(high - low + 1);
[dark_webview_random_refresh_times addObject:@(randomValue)];
}
// 打印所有随机结果
// NSLog(@"随机刷新时间数组: %@", dark_webview_random_refresh_times);
}
}
if(strlen(darkWVDailyrefreshtimes_str) != 0){
// NSLog(@"每日刷新: %s", darkWVDailyrefreshtimes_str);
NSString *objcString = [NSString stringWithUTF8String:darkWVDailyrefreshtimes_str];
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
NSMutableArray *intArray = [NSMutableArray array];
for (NSString *str in stringArray) {
[intArray addObject:@([str intValue])];
}
dark_Dailyrefreshtimes=intArray;
}
if(strlen(dark_url) != 0){
NSString *objcString = [NSString stringWithUTF8String:dark_url];
NSMutableArray *dynamicArray = [NSMutableArray array];
// NSLog(@"hhhhhhhhhhhh%@",objcString);
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
for (NSUInteger i = 0; i < [stringArray count]; i++) {
//NSLog(@"hhhhhhhhhhhh%@",stringArray[i]);
NSArray *stringArray_child = [stringArray[i] componentsSeparatedByString:@"#"];
[dynamicArray addObject:stringArray_child];
}
dark_url_array=dynamicArray;
int type_=-1;
if(webviews.count<=0){
isMultiView=0;
for (int counter = 0; counter < dark_url_array.count; counter++) {
if([dark_url_array[counter][4] intValue]!=type_ ) {
isMultiView++;
type_=[dark_url_array[counter][4] intValue];
[dark_though_rate addObject:@0];
[web_through_times addObject:@0];
[web_disable_times addObject:@0];
[Dark_stopRefeshTimes addObject:@0];
[offset_y addObject:@([dark_url_array[counter][5] intValue])];
// [webviews addObject:[NSNull null]];
WKWebView *wv = [[WKWebView alloc] initWithFrame:CGRectZero];
[webviews addObject:wv];
// NSLog(@"hhhhhhhhhhhh添加了一次%d",type_);
}//判断是否为多webview显示
}
}
}
if(strlen(light_url) != 0){
NSString *objcString = [NSString stringWithUTF8String:light_url];
NSMutableArray *dynamicArray = [NSMutableArray array];
//NSLog(@"hhhhhhhhhhhh%@",objcString);
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
for (NSUInteger i = 0; i < [stringArray count]; i++) {
//NSLog(@"hhhhhhhhhhhh%@",stringArray[i]);
NSArray *stringArray_child = [stringArray[i] componentsSeparatedByString:@"#"];
[dynamicArray addObject:stringArray_child];
}
light_url_array=dynamicArray;
}
if(strlen(web_through_probability) != 0){
NSString *objcString = [NSString stringWithUTF8String:web_through_probability];
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
NSMutableArray *intArray = [NSMutableArray array];
for (NSString *str in stringArray) {
[intArray addObject:@([str intValue])];
}
web_through_array=intArray;
}
if(strlen(click_add_time) != 0){
// NSLog(@"aaaaaaaaaaaaaaaaaattttttt%c",click_add_time);
NSString *objcString = [NSString stringWithUTF8String:click_add_time];
NSArray *stringArray = [objcString componentsSeparatedByString:@"|"];
NSMutableArray *intArray = [NSMutableArray array];
for (NSString *str in stringArray) {
[intArray addObject:@([str floatValue])];
}
ClickAddtime=intArray;
}
}
//设置view的padding
-(void)setViewPadding:(CGRect)rect{
CGRect screenRect = [[UIScreen mainScreen] bounds];
// NSLog(@"screenRect h:%f", screenRect.size.height);
float left = rect.origin.x;
float top = rect.origin.y*screenRect.size.height;
// float right = screenRect.size.width - rect.size.width;
float bottom = rect.size.height*screenRect.size.height;
float h = screenRect.size.height - top - bottom;
//NSLog(@"left:%f, top: %f, right: %f, height: %f", left, top, right, h);
self.frame = CGRectMake(0, 0,screenRect.size.width, screenRect.size.height);
top_=top;
height_=h;
// webview.frame = CGRectMake(0, 0, self.frame.size.width/2, self.frame.size.height);
// webview_1.frame = CGRectMake(self.frame.size.width/2, 0, self.frame.size.width/2, self.frame.size.height);
}
-(void)ChangeViewRect:(BOOL)is_light{
if(is_light){
webviews[0].frame = CGRectMake(0, top_, self.frame.size.width, height_);
for(NSUInteger i=1;i<webviews.count;i++){
webviews[i].frame = CGRectMake(0, 0,0, 0);
}
}
else{
for(NSUInteger i=0;i<webviews.count;i++){
webviews[i].frame = CGRectMake(0, [offset_y[i] intValue], self.frame.size.width, self.frame.size.height);
}
// if(isMultiView>1){
// webview.frame = CGRectMake(0, offset_y, self.frame.size.width, self.frame.size.height);
// webview_1.frame = CGRectMake(0,offset_y1, self.frame.size.width, self.frame.size.height);
// // webview.frame = CGRectMake(0, offset_y, self.frame.size.width-100, self.frame.size.height);
// // webview_1.frame = CGRectMake(100,offset_y1, self.frame.size.width-100, self.frame.size.height);
// }
// else{
// webview.frame = CGRectMake(0,offset_y, self.frame.size.width, self.frame.size.height);
// webview_1.frame = CGRectMake(0, offset_y1,0, 0);
// }
}
}
-(void)SetDarkThough:(BOOL)though{
dark_though=though;
[self setHidden:!though];
}
-(void)setViewBtn:(CGRect)rect{
if(is_first_btn) return;
rewardBtn = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1"]];
rewardBtn.frame = CGRectMake(self.bounds.size.width - rect.origin.x, rect.origin.y, 60, 60);
[self addSubview:rewardBtn];
//圈圈背景图
UIImageView* fillBack = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"8"]];
fillBack.frame = CGRectMake(0,0, rewardBtn.frame.size.width, rewardBtn.frame.size.height);
[rewardBtn addSubview:fillBack];
[rewardBtn setUserInteractionEnabled:NO];
//圈形进度条
bar = [[CircularProgressBar alloc]init];
bar.frame = CGRectMake(0,0, rewardBtn.frame.size.width, rewardBtn.frame.size.height);
bar.bounds = rewardBtn.bounds;
//bar.backgroundColor = UIColor.greenColor;
[bar updateUI];
[rewardBtn addSubview:bar];
//[self setBackgroundColor:UIColor.orangeColor];
//icon图
UIImageView* icon = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"30"]];
icon.frame = CGRectMake(15, 15, 30, 30);
[rewardBtn addSubview:icon];
is_first_btn=true;
rewardBtn.hidden=YES;
}
//检测一个点是否在某个按钮里
-(void)checkPointInsideBtn:(CGPoint)point{
//点是否在飞行按钮里
//if(!self.isHidden) stopTouchTime=0;
if (!flyBtn.isHidden && CGRectContainsPoint(flyBtn.frame, point)){
// NSLog(@"Inside flyBtn");
//避免手指按下立马出发点击事件
[self delayInvoke:0.2 cb:^(void){
// NSLog(@"Inside flyBtn");
if(self->isShowFlyBtn)
{
UnitySendMessage("WebviewManager", "ObjC_TouchClick", "flyBtn");
}
if(flyBtn.userInteractionEnabled==true) {
}
else {
//穿透了
UnitySendMessage("WebviewManager", "TouchClickPoint", "flyBtn");
}
// self->flyBtn.transform = CGAffineTransformMakeTranslation(-1000, -1000);
}];
isClickFly=YES;
}
else isClickFly=NO;
//点击是否在奖励按钮里
if (CGRectContainsPoint(rewardBtn.frame, point)){
//NSLog(@"Inside rewardBtn");
[self delayInvoke:0.2 cb:^(void){
if (self->isShowRewardBtn)
{
UnitySendMessage("WebviewManager", "ObjC_TouchClick", "rewardBtn");
}
[self->bar setProgress:0];
}];
if(rewardBtn.userInteractionEnabled==true) {
}
else {
//穿透了
UnitySendMessage("WebviewManager", "TouchClickPoint", "rewardBtn");
[bar setProgress:0];
}
isClickProgress=YES;
}
else isClickProgress=NO;
}
//设置可穿透字段
-(void)enableCT:(BOOL)flag{
// NSLog(@"Native enableCT: %d",flag);
canCT = flag;
[rewardBtn setUserInteractionEnabled:!flag];
//[flyBtn setUserInteractionEnabled:!flag];
}
-(void)setClickView{
in_game=YES;
}
//延迟执行逻辑
-(void)delayInvoke:(float)delay cb:(dispatch_block_t)cb{
NSTimeInterval delayInSeconds = delay;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), cb);
}
//飞行按钮隐/藏
-(void)showFlyBtn:(BOOL)flag{
//NSLog(@"showFlyBtn: %d", flag);
//[flyBtn setHidden:!flag];
if (flag){
[self startFlyAnim];
}else{
[self stopFlyAnim];
}
}
-(void)setFlyBtnTag:(BOOL)isShow{
if(!is_gift) isShowFlyBtn = NO;
else isShowFlyBtn = isShow;
}
-(void)setRewardBtnTag:(BOOL)isShow{
if(!is_gift) isShowRewardBtn = NO;
else isShowRewardBtn = isShow;
}
-(void)SetOffset:(int)offsety offset_y1:(int)offsety1
{
// NSLog(@"barry ChangeViewRect-==== %d, %d",offset_y,offset_y1);
// offset_y = offsety;
// offset_y1 = offsety1;
}
@end