1371 lines
49 KiB
Objective-C
1371 lines
49 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;
|
|
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_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;
|
|
|
|
BOOL isMultiView;
|
|
float top_;
|
|
float height_;
|
|
BOOL is_gift;
|
|
|
|
int offset_y;
|
|
int offset_y1;
|
|
|
|
// 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;
|
|
|
|
int dark_webview1_random_refresh_time;
|
|
int dark_webview2_random_refresh_time;
|
|
|
|
float web_1_disable_time;
|
|
float web_2_disable_time;
|
|
|
|
}
|
|
|
|
|
|
//单利模式
|
|
+(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];
|
|
// 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 (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; "
|
|
// "}); "
|
|
// "})();"
|
|
// " document.addEventListener('touchstart', function(event) {"
|
|
// " const target = event.target;"
|
|
// " if (target.matches('.ad-class') || target.closest('.ad-class')) {" // 替换 '.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 });";
|
|
NSString *js =
|
|
@"(function() { "
|
|
// 禁用所有表单元素
|
|
"var elements = document.querySelectorAll('input, textarea, select'); "
|
|
"elements.forEach(function(element) { "
|
|
" element.disabled = true; "
|
|
"}); "
|
|
|
|
// 禁用所有音频和视频
|
|
"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')) {" // 替换 '.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 });"
|
|
"})();";
|
|
|
|
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;
|
|
}
|
|
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];
|
|
}
|
|
webview.navigationDelegate=self;
|
|
webview_1.navigationDelegate=self;
|
|
// webview.tag = 1;
|
|
// webview_1.tag = 2;
|
|
webview.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){
|
|
webview.hidden=YES;
|
|
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@""] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
|
|
[webview 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];
|
|
[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;
|
|
[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;
|
|
}
|
|
-(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;
|
|
stopTouchTime+=0.1;
|
|
Dark_stopRefeshTime+=0.1;
|
|
Dark_stopRefeshTime_1+=0.1;
|
|
|
|
|
|
if(is_transparent){
|
|
|
|
|
|
if([dark_Dailyrefreshtimes[0] intValue]>0&&Dark_stopRefeshTime>dark_webview1_random_refresh_time){
|
|
dark_Dailyrefreshtimes[0]=@([dark_Dailyrefreshtimes[0] intValue]-1);
|
|
UnitySendMessage("WebviewManager", "H5AutoRefresh","dark_Dailyrefreshtimes|0" );
|
|
Dark_stopRefeshTime=0;
|
|
dark_webview1_random_refresh_time=[dark_H5Refreshtime[0] intValue] + arc4random_uniform([dark_H5Refreshtime[1] intValue] - [dark_H5Refreshtime[0] intValue] + 1);
|
|
NSLog(@"hhhhhhhhhhhh3333333kkkk%d",dark_webview1_random_refresh_time);
|
|
|
|
[self showDarkWebview:1];
|
|
[self ChangeViewRect:false];
|
|
}
|
|
|
|
if([dark_Dailyrefreshtimes[1] intValue]>0&&Dark_stopRefeshTime_1>dark_webview2_random_refresh_time){
|
|
dark_Dailyrefreshtimes[1]=@([dark_Dailyrefreshtimes[1] intValue]-1);
|
|
UnitySendMessage("WebviewManager", "H5AutoRefresh","dark_Dailyrefreshtimes|1" );
|
|
Dark_stopRefeshTime_1=0;
|
|
dark_webview2_random_refresh_time=[dark_H5Refreshtime[2] intValue] + arc4random_uniform([dark_H5Refreshtime[3] intValue] - [dark_H5Refreshtime[2] intValue] + 1);
|
|
NSLog(@"hhhhhhhhhhhh3333333kkkk%d",dark_webview2_random_refresh_time);
|
|
[self showDarkWebview:2];
|
|
[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) {
|
|
webview.hidden=NO;
|
|
}
|
|
|
|
}
|
|
|
|
//显示webview
|
|
-(void)showWebview:(NSString*)url{
|
|
if (is_transparent) return; //view在隐藏状态下不显示webview,因为目前只需要处理明webview 的显示。
|
|
// NSLog(@"xianshimingchuantouuuuuuuuuuuuuu3----%d");
|
|
[self initWebview:1];
|
|
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] ];
|
|
[webview loadRequest:request];
|
|
webview_IsCLickAd=YES;
|
|
if (webview.superview == nil)
|
|
[self insertSubview:webview 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;
|
|
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{
|
|
[webview 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){
|
|
//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=1;
|
|
|
|
if(!dark_though){
|
|
touchedView=[super hitTest:point withEvent:event];
|
|
}
|
|
else{
|
|
// NSLog(@"[ggggggggggggggggggg21: %@剩余的可刷新次数", web_through_array[0]);
|
|
// NSLog(@"[ggggggggggggggggggg21: %@剩余的可刷新次数", web_through_array[1]);
|
|
//
|
|
float random_ = arc4random_uniform(100) ;
|
|
// random_=0;//zhushi
|
|
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_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){
|
|
|
|
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_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[2] floatValue] + ([ClickAddtime[3] floatValue] - [ClickAddtime[2] floatValue]) * drand48();
|
|
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_1_through_time<0){
|
|
return touchedView;
|
|
}
|
|
if(web_1_through_time<web_1_disable_time)return nil;
|
|
else {
|
|
web_1_disable_time=[ClickAddtime[0] floatValue] + ([ClickAddtime[1] floatValue] - [ClickAddtime[0] floatValue]) * drand48();
|
|
web_1_through_time=-0.1;
|
|
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* )field6 field7:(char* )field7 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(field6) != 0){
|
|
NSString *objcString = [NSString stringWithUTF8String:field6];
|
|
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(field7) != 0){
|
|
NSString *objcString = [NSString stringWithUTF8String:field7];
|
|
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;
|
|
[dark_though_rate addObject:@0];
|
|
for (int counter = 0; counter < dark_url_array.count; counter++) {
|
|
|
|
if([dark_url_array[counter][4] intValue]!=1 ) {
|
|
isMultiView=YES;
|
|
[dark_though_rate addObject:@0];
|
|
}//判断是否为多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;
|
|
}
|
|
NSLog(@"aaaaaaaaaaaaaaaaaattttttt%f",[ClickAddtime[0] floatValue]);
|
|
|
|
}
|
|
|
|
//设置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){
|
|
webview.frame = CGRectMake(0, top_, self.frame.size.width, height_);
|
|
webview_1.frame = CGRectMake(0, 0,0, 0);
|
|
}
|
|
else{
|
|
if(isMultiView){
|
|
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
|