iOS开发-启动页广告实现
启动页广告实现是一个非常常见的广告展示模式。 就是在启动时候显示广告,之后点击跳转到广告页面或者其他APP。
一、实现启动页广告
启动页广告控件实现,将View放置在keyWindow上,显示广告图片,点击广告图片进行跳转。
如果没有操作,倒计时5s后进行App
具体代码如下
SDFullScreenADView.h
#import <UIKit/UIKit.h>#define kFullScreenAdTag 9012//跳转按钮样式
typedef NS_ENUM(NSUInteger, SDSkipButtonType) {SDSkipButtonTypeText = 0,
};typedef void(^SDFullScreenADBlock)();@interface SDFullScreenADView : UIView/**广告图的显示时间(默认5秒)*/
@property (nonatomic, assign) NSUInteger duration;/**右上角按钮的样式(默认倒计时+跳过)*/
@property (nonatomic, assign) SDSkipButtonType skipType;/**广告图*/
@property (nonatomic, strong) UIImage *adImage;/**广告数据,跳转数据*/
@property (nonatomic, strong) id data;@property (nonatomic, copy) SDFullScreenADBlock block;/**显示广告*/
- (void)show;/**默认广告@return id*/
+ (SDFullScreenADView *)defaultFullScreenADView;@end
SDFullScreenADView.m
#import "SDFullScreenADView.h"#define kMainScreenWidth [UIScreen mainScreen].bounds.size.width@interface SDFullScreenADView ()@property (nonatomic, strong) UIImageView *adImageView; //广告界面
@property (nonatomic, strong) UIButton *skipButton; //跳过按钮
@property (nonatomic, strong) UILabel *timeLabel; //倒计时控件@property (nonatomic, strong) NSTimer *displayTimer; //剩余时间倒计时@end@implementation SDFullScreenADView- (instancetype)init {self = [super init];if (self) {[self configDefaultParameter];[self setupSubView];UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adTapAction)];[self addGestureRecognizer:tap];UIWindow *window = [UIApplication sharedApplication].keyWindow;if (!window) {return nil;}[window addSubview:self];}return self;
}#pragma mark - Private Method -
/**配置默认参数*/
- (void)configDefaultParameter {self.duration = 5;self.skipType = SDSkipButtonTypeText;self.frame = [[UIScreen mainScreen] bounds];
}/**设置控件*/
- (void)setupSubView {[self addSubview:self.adImageView];self.adImageView.frame = self.bounds;[self addSubview:self.skipButton];self.skipButton.frame = CGRectMake(kMainScreenWidth - 80, 30, 70, 30);[self addSubview:self.timeLabel];self.timeLabel.frame = self.skipButton.frame;
}- (void)setDuration:(NSUInteger)duration {_duration = duration;
}- (void)setAdImage:(UIImage *)adImage {_adImage = adImage;
}- (void)adTapAction {[self.displayTimer invalidate];self.displayTimer = nil;[self dismiss];if (self.block) {self.block();}
}- (void)skipButtonAction {[self dismiss];
}- (void)displayTimerAciton {self.duration--;if (self.duration == 0) {[self dismiss];return;}if (self.duration > 0) {_timeLabel.text = [NSString stringWithFormat:@"%lus跳过广告",(unsigned long)self.duration];}
}/**显示广告*/
- (void)show {if (!self.adImage) {[self removeFromSuperview];return;}[self addDisplayTimer];self.adImageView.image = self.adImage;self.alpha = 0.0;[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{self.alpha = 1.0;} completion:^(BOOL finished) {}];
}/**消失广告图*/
- (void)dismiss {[UIView animateWithDuration:0.5 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{self.transform = CGAffineTransformMakeScale(1.2, 1.2);self.alpha = 0.0;} completion:^(BOOL finished) {[self removeFromSuperview];}];
}#pragma mark - SETTER/GETTER
- (UIButton *)skipButton {if (!_skipButton) {_skipButton = [UIButton buttonWithType:UIButtonTypeCustom];_skipButton.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4];_skipButton.layer.cornerRadius = 4;_skipButton.layer.masksToBounds = YES;_skipButton.titleLabel.font = [INSysFont inSysFontOfSize:14];[_skipButton addTarget:self action:@selector(skipButtonAction) forControlEvents:UIControlEventTouchUpInside];}return _skipButton;
}- (UIImageView *)adImageView {if (!_adImageView) {_adImageView = [[UIImageView alloc] initWithFrame:self.bounds];_adImageView.backgroundColor = [UIColor clearColor];_adImageView.clipsToBounds = YES;_adImageView.contentMode = UIViewContentModeScaleAspectFill;}return _adImageView;
}- (UILabel *)timeLabel {if (!_timeLabel) {_timeLabel = [[UILabel alloc] initWithFrame:CGRectZero];_timeLabel.backgroundColor = [UIColor clearColor];_timeLabel.textAlignment = NSTextAlignmentCenter;_timeLabel.font = [UIFont fontWithName:@"Heiti SC" size:12];_timeLabel.textColor = [UIColor whiteColor];_timeLabel.text = @"跳过广告";}return _timeLabel;
}- (void)addDisplayTimer {if (self.displayTimer) {[self.displayTimer invalidate];self.displayTimer = nil;}self.displayTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(displayTimerAciton) userInfo:nil repeats:YES];[[NSRunLoop mainRunLoop] addTimer:self.displayTimer forMode:NSRunLoopCommonModes];
}#pragma mark - DEALLOC
- (void)dealloc {[self.displayTimer invalidate];self.displayTimer = nil;
}/**默认广告@return id*/
+ (SDFullScreenADView *)defaultFullScreenADView {SDFullScreenADView *fullScreenAdView = [[SDFullScreenADView alloc] init];fullScreenAdView.duration = 3;fullScreenAdView.tag = kFullScreenAdTag;fullScreenAdView.alpha = 0.0;return fullScreenAdView;
}@end
二、小结
iOS开发-启动页广告实现
启动页广告实现是一个非常常见的广告展示模式。 就是在启动时候显示广告,之后点击跳转到广告页面或者其他APP。
学习记录,每天不停进步。