iAdの位置固定方法を調べて最適解を得たのでメモ。
やっていること
iAdを表示するviewを作成。
iAdのviewを固定位置にするためだけのUIViewを生成。
UIViewはスクロールの度に走る次のイベントで位置を設定しなおす。
- (void)scrollViewDidScroll:(UIScrollView *)
サンプル
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
//for iAd initialization
//tmp view
// iAdViewContainerはUIViewクラスのメンバ。
if(iAdViewContainer_ == nil){
iAdViewContainer_ = [[UIView alloc]initWithFrame:self.view.frame];
[self.view addSubview:iAdViewContainer_];
//adView_ はADBannerViewクラスのメンバ
adView_ = [[ADBannerView alloc] initWithFrame:CGRectMake(0.0, 367.0, 320.0, 50.0)];
adView_.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
[iAdViewContainer_ addSubview:adView];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self resetIAdPosition];
}
- (void)resetIAdPosition
{
[iAdViewContainer_ setFrame:CGRectMake(
self.tableView.contentOffset.x,
self.tableView.contentOffset.y,
0,0)];
[self.view bringSubviewToFront:iAdViewContainer_];
}
解説
iAdのviewを固定位置にするためだけのUIViewを生成。
UIViewはスクロールの度に走る次のイベントで位置を設定しなおす。
- (void)scrollViewDidScroll:(UIScrollView *)
サンプル
- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; //for iAd initialization //tmp view // iAdViewContainerはUIViewクラスのメンバ。 if(iAdViewContainer_ == nil){ iAdViewContainer_ = [[UIView alloc]initWithFrame:self.view.frame]; [self.view addSubview:iAdViewContainer_]; //adView_ はADBannerViewクラスのメンバ adView_ = [[ADBannerView alloc] initWithFrame:CGRectMake(0.0, 367.0, 320.0, 50.0)]; adView_.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; [iAdViewContainer_ addSubview:adView]; } } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [self resetIAdPosition]; } - (void)resetIAdPosition { [iAdViewContainer_ setFrame:CGRectMake( self.tableView.contentOffset.x, self.tableView.contentOffset.y, 0,0)]; [self.view bringSubviewToFront:iAdViewContainer_]; }
解説
画面下部に固定させたいので、iAd自身とそれを固定位置で保持するviewの2つを生成する。
片方は色々なところで参照するのでメンバ変数として定義しておく。
サンプル上ではiAdViewController_がUIView型のメンバだ。
viewDidApearイベント時にで、画面に指定のコントローラが保持するViewが出現した際にiAdを生成する。
補足
tableView:titleForHeaderInSection:で項目名や、
tableView:titleForFooterInSection:で説明文を入れていると、
viewが手前に配置されてしまい、iAdのバナーよりもうしろになる。
これを回避するために、奥に成ってしまっているiAdのz-indexを手前に描画されるようにresetIAdPositionでviewのソートをさせている。
これで手前側に移動させることができる。
ただし、推奨とされている表示方法はもう一段階踏み込まなければ成らない。
それは表示可能になった際にはじめて表示するというもの。
オブジェクトとして生成してから表示が可能になるまでに時間がかかるので、その間は画面外にでも配置しておくべき。
これは別途記事にする。
参考
サルにもできるiPhoneアプリの作り方iAdを設置してみよう! その1
※ソースはほとんどここのものがベース。
StackOverFlow:How to set iPhone UI View z index?
iOS5プログラミングブック
posted with amazlet at 12.06.15
加藤 寛人 吉田 悠一 藤川 宏之 西方 夏子 関川 雄介 高丘 知央
インプレスジャパン
売り上げランキング: 2989
インプレスジャパン
売り上げランキング: 2989