本范例只着重在如何使用 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 的基本使用方法相关推荐

  1. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  2. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  3. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程

    参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...

  4. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  5. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

  6. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  7. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解

    1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...

  8. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  9. Java Calendar.add()方法的使用,参数含义。指定时间差。

    cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作. 第 ...

最新文章

  1. 细说接口性能优化的11个小技巧
  2. SQL SERVER-日期按时区转换
  3. 排除问题的时候不要随意修改系统筛选数据的逻辑
  4. ITK:在图像中找到最大和最小
  5. django按钮点击后想刷新当前页面的view写法
  6. 牛客题霸 [子数组的最大累加和问题] C++题解/答案
  7. 一个简单字符型设备驱动及其测试
  8. php git pull
  9. python封装成exe后运行失败_python 在编译成EXE 文件后报错 我实在是找不出原因
  10. FL Studio20.8中文完整果味版编曲
  11. MERIT DEM 90m数据下载
  12. 用例子来学习正则表达式
  13. windows10下载安装jdk1.7教程
  14. 电工模拟接线软件 app_老电工教你家装线路接线
  15. JDK动态代理与CGLIB动态代理
  16. malloc 函数详解
  17. 哲学家就餐问题python_哲学家就餐问题的一种Python解决方案
  18. FPGA 频率计实验
  19. Vue 2.x折腾记 - (16) 基于Ant Design Vue 封装一个配置式的表单搜索组件
  20. 《图解密码技术》读后的总结

热门文章

  1. 32 MM配置-采购-采购订单-定义编码范围
  2. 35 FI配置-财务会计-应收账款和应付账款-为客户定义备选统驭科目
  3. java程序算法实例_java编程算法经典案例
  4. 深度学习实验1:pytorch实践与前馈神经网络
  5. sql server 记录删除数据ip_玻璃做介质,用光记录或删除数据,全息云存储来了!...
  6. 6D位姿估计算法Densefusion代码阅读
  7. transforms.Compose()函数
  8. phpcms文章的发布时间改为可输入的文本框
  9. win10快速运行vue项目跑起来 - 方法篇
  10. phpcms留言板功能的实现