ADBannerView 的基本使用方法
本范例只着重在如何使用 ADBannerView 并没有 iAD 的相关设定与申请流程,至于其他行动广告的部份大家可以参考行动广告 Banner!让你赚大钱!一文。
首先汇入 iAD Framework,并引用其标头档,Xcode 4 Framework 汇入方式可以参考 Xcode 4 新增 Framework 的方法一文。
#import <iAd/iAd.h>
接着在要使用此物件的类别上设定 代理,并建立一个 ADBannerView 型态的物件。
@interface AdBannerViewViewController : UIViewController {ADBannerView *bannerView;}
在功能方面,我们希望 ADBannerView 能够与画面的呈现方式一致(直立与倾置),并且在 ADBannerView 准备好时能自动弹出显示,使用者也能自行切换是否要显示此 ADBannerView。
针对上述这些功能对 ADBannerView 进行初始化的动作,其程式码如下。
//自定义的函式 Banner初始化(以画面直立)- (void)initializeBanner {//以画面直立的方式设定Banner于画面底部bannerView = [[ADBannerView alloc]initWithFrame:CGRectMake(0.0, 430.0, self.view.frame.size.width, 50.0)];//此Banner所能支援的类型bannerView.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil];//目前的Banner 类型bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;//设定代理bannerView.delegate = self;//无法按下触发广告bannerView.userInteractionEnabled = NO;//设定偏位移量bannerView.frame = CGRectOffset(bannerView.frame, 0, 50);[self.view addSubview:bannerView];}
现在我们有了一个 ADBannerView,不过他的目前因为偏移量的关系在画面之外,暂时无法看到,所以下面程式码使用动画的方式将 ADBannerView 移动到画面内,制作出类似弹出的效果。
- (void)bannerViewAnimation {//动画设定[UIView beginAnimations:@"BannerViewAnimation" context:NULL];//以userInteractionEnabled状态排判断bannerView是否在画面内if (bannerView.userInteractionEnabled) {bannerView.frame = CGRectOffset(bannerView.frame, 0, 50);} else {bannerView.frame = CGRectOffset(bannerView.frame, 0, -50);}//开始动画[UIView commitAnimations];//将userInteractionEnabled做反向设定bannerView.userInteractionEnabled = !bannerView.userInteractionEnabled;}
上述程式码使用 userInteractionEnabled 这个参数来当作判断 ADBannerView 是否存在于画面内的依据,并且使用类似开关的技巧,每一次执行该函式都会得到一个反向的结果。由于我们希望 ADBannerView 准备好时会自动弹出来,以及使用者也可以自行切换它,所以必须在下列两个事件中呼叫上述函式。
//使用者按钮事件- (IBAction)onButtonPress:(id)sender {[self bannerViewAnimation];}//当ADBannerView完成读取广告时会触发的事件- (void)bannerViewDidLoadAd:(ADBannerView *)banner {[self bannerViewAnimation];}
现在还剩下最后一个功能,就是 ADBannerView 能够与画面的呈现方式一致(直立与倾置),我们可以使用下列函式来重新设定 ADBannerView 的位置与他的类型。
//画面转动时呼叫的内建函式- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {//还原bannerView预设值bannerView.userInteractionEnabled = NO;bannerView.frame = CGRectOffset(bannerView.frame, 0,0);//判断画面是否倾置if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;bannerView.frame = CGRectMake(0.0, 288.0, self.view.frame.size.width, 32.0);}else {bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;bannerView.frame = CGRectMake(0.0, 430.0, self.view.frame.size.width, 50.0);}//重新设定偏移量bannerView.frame = CGRectOffset(bannerView.frame, 0, 50);}
最后,不要忘记在程式进入点引用 ADBannerView 初始化函式,并在对应的函式中释放其记忆体。
- (void)viewDidLoad{[super viewDidLoad];[self initializeBanner];}
- (void)dealloc{[bannerView release];[super dealloc];}
另外下面提供几个跟 ADBannerView 有关的内建函式。
//ADBannerView发生错误时会触发- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {}
//按下广告时会触发的函式-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave { //这里可以放置暂停你应用程式的程式码return YES;}
//重广告中按下返回应用程式按钮时所触发的函式- (void)bannerViewActionDidFinish:(ADBannerView *)banner {//这里可以放置重启你应用程式的程式码}
ps:在测试 ADBannerView 必须要连上网际网路才行,有时候测试用的 iAD 会因为连线烦繁忙等问题无法取得测试用广告,可能需要多执行几次。
来源:
http://furnacedigital.blogspot.com/2011/09/adbannerview.html
参考:
http://www.yifeiyang.net/iphone-development-skills-of-the-articles-published-5-add-an-ad-in-the-program/
ADBannerView 的基本使用方法相关推荐
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...
- Java面试题大全2021版
一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...
- Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- IDEA自动生成对象所有set方法
idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...
- List元素互换,List元素转换下标,Java Collections.swap()方法实例解析
Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...
- java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解
1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...
- spring boot项目 中止运行 最常用的几种方法
spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...
- Java Calendar.add()方法的使用,参数含义。指定时间差。
cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作. 第 ...
最新文章
- 细说接口性能优化的11个小技巧
- SQL SERVER-日期按时区转换
- 排除问题的时候不要随意修改系统筛选数据的逻辑
- ITK:在图像中找到最大和最小
- django按钮点击后想刷新当前页面的view写法
- 牛客题霸 [子数组的最大累加和问题] C++题解/答案
- 一个简单字符型设备驱动及其测试
- php git pull
- python封装成exe后运行失败_python 在编译成EXE 文件后报错 我实在是找不出原因
- FL Studio20.8中文完整果味版编曲
- MERIT DEM 90m数据下载
- 用例子来学习正则表达式
- windows10下载安装jdk1.7教程
- 电工模拟接线软件 app_老电工教你家装线路接线
- JDK动态代理与CGLIB动态代理
- malloc 函数详解
- 哲学家就餐问题python_哲学家就餐问题的一种Python解决方案
- FPGA 频率计实验
- Vue 2.x折腾记 - (16) 基于Ant Design Vue 封装一个配置式的表单搜索组件
- 《图解密码技术》读后的总结
热门文章
- 32 MM配置-采购-采购订单-定义编码范围
- 35 FI配置-财务会计-应收账款和应付账款-为客户定义备选统驭科目
- java程序算法实例_java编程算法经典案例
- 深度学习实验1:pytorch实践与前馈神经网络
- sql server 记录删除数据ip_玻璃做介质,用光记录或删除数据,全息云存储来了!...
- 6D位姿估计算法Densefusion代码阅读
- transforms.Compose()函数
- phpcms文章的发布时间改为可输入的文本框
- win10快速运行vue项目跑起来 - 方法篇
- phpcms留言板功能的实现