广告页显示
逻辑图
代码
-
根控制器
MSTAdServerViewController *VC = [[MSTAdServerViewController alloc] init]; self.window.rootViewController = VC; [self.window makeKeyAndVisible];
-
获取屏幕尺寸
NSString *imageName = [self splashImageNameForOrientation:[[UIDevice currentDevice] orientation]];
/* 根据当前设备的'旋转方向' -> 获取 当前VC 的 view尺寸 -> 匹配设配当前的 旋转方向 及 尺寸
-> 获取 'UILaunchImages' 里,所有 'LaunchImage' -> 通过mainBundle -> infoDictionary -> UILaunchImages -> 对 '设备尺寸'&'旋转方向' 进行匹配 => 获取 Launch Image 的图片 复制代码
*/
- (NSString *)splashImageNameForOrientation:(UIDeviceOrientation)orientation { CGSize viewSize = self.view.bounds.size; NSString *viewOrientation = @"Portrait"; if (UIDeviceOrientationIsLandscape(orientation)) { viewSize = CGSizeMake(viewSize.height, viewSize.width); viewOrientation = @"Landscape"; } NSArray *imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"]; for (NSDictionary *dict in imagesDict) { CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]); if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]) { return dict[@"UILaunchImageName"]; } } return nil; }
-
设定当前控制器背景内容
// 把第二步获取到到图片,转成 CGImage 变成当前 VC 的 layer self.view.layer.contents = (__bridge id)([(id)[UIImage imageNamed:imageName] CGImage]);
-
添加 '广告ImageView'
_showAdServerImgView.alpha = 0.0; // 设定一下 alpha 值,方便等等做动画 [self.view addSubview:_showAdServerImgView];
4.1 广告图 -> 存在
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kMSTAdServerImgURLFileName];
if (data) {
self.advert = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[self setterAdServerImgURL];
}
// 然后,用动画展示
[self.showAdServerImgView setImageURL:url];
[UIView animateWithDuration:0.45 animations:^{
self.showAdServerImgView.alpha = 1.0;
}];
复制代码
4.2 广告图片 -> 不存在
// 如果不存在,就等 网络数据,如果一直没有,那就下次再说
复制代码
-
获取网络数据
- (void)fetchAdvert { @weakify(self); [[MSTClient sharedInstance] fetchAdvertWithCompletionHandler:^(NSInteger code, NSString *msg, id data) { @strongify(self); if (respondCodeOK(code)) { self.advert = [MSTAdvert modelWithDictionary:data]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.advert]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:kMSTAdServerImgURLFileName]; [self setterAdServerImgURL]; } }]; }
-
再次变更 '根控制器'
-
(void)setRootViewControllerForWindow { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
MSTHomeViewController *VC = [[MSTHomeViewController alloc] init]; MSTHomeNavViewController *nav = [[MSTHomeNavViewController alloc] initWithRootViewController:VC]; app.window.rootViewController = nav; 复制代码
}); }
-