游戏陪玩源码设置开屏广告/引导页功能实现
游戏陪玩源码设置APP开屏引导页,通常适用于引导客户关注、公布重大消息,或是当广告位出租变现的作用,引导页一般有两种展现形式——图片或短视频,点击即可进入跳转链接,此功能具体实现代码如下:
1. 游戏陪玩源码,加载启动页
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[GuideViewController alloc] init]]; [self.window makeKeyAndVisible];
在用户进入启动页时,首先加载程序启动图作为背景,在整个view上添加手势,作为点击事件响应
self.navigationController.navigationBar.hidden = YES; _launchImgaeV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height)]; _launchImgaeV.image = [[YBToolClass sharedInstance] getLaunchImage]; [self.view addSubview:_launchImgaeV]; [self requestData]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(goWeb)]; [self.view addGestureRecognizer:tap];
2. 获取展示引导页面的时间,展示视频图片详情,如果不显示引导页直接跳过
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
NSString *requestUrl = [purl stringByAppendingFormat:@"/?service=Guide.GetGuide"];
session.requestSerializer.timeoutInterval = 5.0;
[session POST:requestUrl parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSNumber *number = [responseObject valueForKey:@"ret"] ;
if([number isEqualToNumber:[NSNumber numberWithInt:200]])
{
NSArray *data = [responseObject valueForKey:@"data"];
int code = [minstr([data valueForKey:@"code"]) intValue];
id info = [data valueForKey:@"info"];
if (code == 0) {
curIndex = 0;
NSDictionary *infoDIc = [info firstObject];
if ([minstr([infoDIc valueForKey:@"switch"]) isEqual:@"1"]) {
_listArray = [infoDIc valueForKey:@"list"];
if ([minstr([infoDIc valueForKey:@"type"]) isEqual:@"0"]) {
_showTime = [minstr([infoDIc valueForKey:@"time"]) intValue];
_allTime = _showTime * (int)_listArray.count;
[self showPic];
}else{
if (_listArray.count > 0) {
_videoUrl = [NSURL URLWithString:minstr([_listArray[0] valueForKey:@"thumb"])];
[self showVideo];
}else{
[self jumpBtnClick];
}
}
}else{
[self jumpBtnClick];
}
}else{
[self jumpBtnClick];
}
}else{
[self jumpBtnClick];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self jumpBtnClick];
}];3. 在游戏系统源码内创建引导页图片类型数据详情
_circleBtn = [UIButton buttonWithType:0]; _circleBtn.frame = CGRectMake(_window_width-50, 40+statusbarHeight, 40, 40); [_circleBtn setTitle:YZMsg(@"跳过") forState:0]; _circleBtn.titleLabel.font = [UIFont systemFontOfSize:13]; _circleBtn.layer.cornerRadius = 20; _circleBtn.layer.masksToBounds = YES; [_circleBtn addTarget:self action:@selector(jumpBtnClick) forControlEvents:UIControlEventTouchUpInside]; [_circleBtn setBackgroundColor:RGB_COLOR(@"#000000", 0.5)]; [self.view addSubview:_circleBtn]; float centerX = _circleBtn.width/2.0; float centerY = _circleBtn.height/2.0; //半径 float radius = (_circleBtn.width-3)/2.0; //创建贝塞尔路径 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(centerX, centerY) radius:radius startAngle:(-0.5f*M_PI) endAngle:1.5f*M_PI clockwise:YES]; //添加背景圆环 CAShapeLayer *backLayer = [CAShapeLayer layer]; backLayer.frame = _circleBtn.bounds; backLayer.fillColor = [[UIColor clearColor] CGColor]; backLayer.strokeColor = [UIColor whiteColor].CGColor; backLayer.lineWidth = 3; backLayer.path = [path CGPath]; backLayer.strokeEnd = 1; [_circleBtn.layer addSublayer:backLayer]; //创建进度layer _progressLayer = [CAShapeLayer layer]; _progressLayer.frame = _circleBtn.bounds; _progressLayer.fillColor = [[UIColor clearColor] CGColor]; //指定path的渲染颜色 _progressLayer.strokeColor = [[UIColor blackColor] CGColor]; _progressLayer.lineCap = kCALineCapRound; _progressLayer.lineWidth = 3; _progressLayer.path = [path CGPath]; _progressLayer.strokeEnd = 0; //设置渐变颜色 CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = _circleBtn.bounds; [gradientLayer setColors:[NSArray arrayWithObjects:(id)[RGB_COLOR(@"#ff7200", 1) CGColor],(id)[RGB_COLOR(@"#ff7200", 1) CGColor], nil]];//normalColors gradientLayer.startPoint = CGPointMake(1, 1); gradientLayer.endPoint = CGPointMake(0, 0); [gradientLayer setMask:_progressLayer]; //用progressLayer来截取渐变层 [_circleBtn.layer addSublayer:gradientLayer]; _progressTimer = [NSTimer scheduledTimerWithTimeInterval:_countTime target:self selector:@selector(progresTimeDaoJiShi) userInfo:nil repeats:YES]; _launchImgaeV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height)]; _launchImgaeV.image = [[YBToolClass sharedInstance] getLaunchImage]; [self.view addSubview:_launchImgaeV];
4. 在游戏陪玩源码内创建引导页视频数据详情
- (void)showVideo{
_launchImgaeV.hidden = YES;
NSMutableDictionary * headers = [NSMutableDictionary dictionary];
[headers setObject:h5url forKey:@"referer"];
AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:_videoUrl options:@{@"AVURLAssetHTTPHeaderFieldsKey" : headers}];
AVPlayerItem * songItem = [AVPlayerItem playerItemWithAsset:urlAsset];
AVPlayer *player = [[AVPlayer alloc]initWithPlayerItem:songItem];
// AVPlayer *player = [AVPlayer playerWithURL:_videoUrl];
player.volume = 1.0;
self.videoPlayer = player;
_videoLayer = [AVPlayerLayer playerLayerWithPlayer:self.videoPlayer];
_videoLayer.videoGravity = AVLayerVideoGravityResizeAspect;
_videoLayer.position = CGPointMake(_window_width/2, _window_height/2);
_videoLayer.bounds = self.view.bounds;
//Layer只能添加到Layer上面
[self.view.layer addSublayer:_videoLayer];
AVPlayerItem *playerItem = self.videoPlayer.currentItem;
// 给AVPlayer添加观察者 必须实现 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
//监控状态属性(AVPlayer也有一个status属性,通过监控它的status也可以获得播放状态)
[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
__weak typeof(self)WeakSelf = self;
//播放进度观察者 //设置每0.1秒执行一次
_playerTimeObserver = [self.videoPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
//进度 当前时间/总时间
CGFloat progress = CMTimeGetSeconds(WeakSelf.videoPlayer.currentItem.currentTime) / CMTimeGetSeconds(WeakSelf.videoPlayer.currentItem.duration);
if (progress > 0.0f) {
[WeakSelf creatJumpBtn];
}
}];
[self.videoPlayer play];
_launchImgaeV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height)];
_launchImgaeV.image = [[YBToolClass sharedInstance] getLaunchImage];
[self.view addSubview:_launchImgaeV];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.videoPlayer.currentItem];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
}
- (void)progresTimeDaoJiShi{
_countTime += 0.1;
_progressLayer.strokeEnd = _countTime/_allTime;
[_progressLayer removeAllAnimations];
int aaaa = _countTime *10;
if (aaaa % (_showTime * 10) == 0) {
int index = aaaa / (_showTime * 10);
if (index < _imgaeArray.count) {
curIndex = index;
UIImageView *imgaeV = _imgaeArray[index-1];
UIImageView *nextImgaeV = _imgaeArray[index];
imgaeV.hidden = YES;
nextImgaeV.hidden = NO;
}
}
if (_countTime >= _allTime) {
[self jumpBtnClick];
}
}5. 当点击跳过时,游戏陪玩源码自动响应,执行进入主页或者登录页面的代码,至此是整个登录页显示过程
[self stop];
UIApplication *app =[UIApplication sharedApplication];
AppDelegate *app2 = (AppDelegate *)app.delegate;
UINavigationController *nav;
if ([Config getOwnID]) {
nav = [[UINavigationController alloc]initWithRootViewController:[[ZYTabBarController alloc]init]];
}else{
nav = [[UINavigationController alloc]initWithRootViewController:[[PhoneLoginVC alloc]init]];
}
app2.window.rootViewController = nav;以上就是《游戏陪玩源码设置开屏广告/引导页功能实现》的全部内容,在游戏陪玩源码中,引导页功能还是很有用的,毕竟作为游戏市场的周边行业,游戏陪玩平台可以为电竞游戏、游戏周边产品导流,实现其流量平台的广告优势之处。
声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com






鲁公网安备 37090202000844号

