2011-01-19 3 views
2

Я сделал приложение ipad, используя UISplitViewController, который функционирует в обеих ориентациях. Теперь я хочу добавить баннеры в это приложение. Как мне это сделать? В конструкторе интерфейса я могу добавить баннер portait в detailView, который работает более или менее, но когда я поворачиваю iPad и щелкаю баннер, он открывается в портретном режиме, а не в ландшафтном режиме. И баннер никогда не сможет получить заданную ширину для режима ipad-landscape.Как добавить adbannerview в UISplitviewController

Попытка сделать это программно, это говорит мне, что родительский элемент adbannerview должен быть UIViewController.

ответ

2

Эта же проблема привела меня в бешенство до тех пор, пока я не нашел образец iAdSuite. Итак, чтобы расширить ответ от Erran: используйте пример кода iAdSuite от Apple.

Получите свое рабочее приложение с раздельным просмотром, используя раскадровки.

Включите iAd Framework.

Скопируйте файлы BannerViewController.h и .m в свое приложение. Затем в AppDelegate.м в «приложения didFinishLaunching» скопировать строку из AppDelegate iAdSuite как в последней строке здесь:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
{ 
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
    splitViewController.delegate = (id)navigationController.topViewController; 
    UINavigationController *masterNavigationController = splitViewController.viewControllers[0]; 

    _bannerViewController = [[BannerViewController alloc] initWithContentViewController:splitViewController]; 

В разделе iPhone вам нужна эта строка:

_bannerViewController = [[BannerViewController alloc] initWithContentViewController:navigationController]; 

Незадолго до возвращения заявление добавить этот

self.window.rootViewController = _bannerViewController; 

Добавьте это в верхней части ого

@implementation AppDelegate{ 
BannerViewController *_bannerViewController;} 

#import "BannerViewController.h" 

Или создайте свойство bannerViewController любым способом, который вы предпочитаете.

Изменить .h следующим образом:

#import <UIKit/UIKit.h> 
@class BannerViewController; 
@interface AppDelegate : UIResponder <UIApplicationDelegate> 

Этого было достаточно, чтобы получить все это работать. В настоящее время в приложении BannerView работает приложение с раздельным просмотром. Это обрабатывает все функции AdBannerDelegate.

Удачи :-)

+0

Работал отлично, спасибо. – zic10

0

Сначала это немного похоже на то, что вы забыли раскомментировать или реализовать переменную shouldAutorotateToInterfaceOrientation ... Но я не совсем уверен. Что происходит, когда вы нажимаете на баннер? Открывает ли он новый View и UIWebView или что-то еще? Или что-то другое? И когда мы говорим о баннерах AD прямо сейчас, вам, вероятно, стоит подумать о внедрении сервиса Apple iAd.

+0

Да, мы говорим об iAds в этом случае. Я реализовал функцию shouldAutorotateToInterfaceOrientation. Основная проблема заключается в том, что единственным видом в альбомной ориентации, который занимает весь экран, является splitview, и к этому представлению вы не можете добавить баннер. Баннер открывает новое представление (я думаю, это UIBannerView, по крайней мере, класс, который вы обычно не можете достичь). –

2

В коде образца Apple приведен пример реализации iAd с разделенным представлением, который вы можете легко добавить в свое приложение. : ^)

1

Я принял ответ @ ipwnstuff немного дальше.

первая оговорка: iAd позволяет показывать только на «портрет» или «пейзаж», а на iPad это означает 768x66 или 1024x66 соответственно. это означает, что нет возможности ограничить ADBannerView только подробным представлением UISplitViewController, если вы не хотите катить свой, который имеет чуть более широкий вид (и, следовательно, немного более узкое представление masterViewController. Я хотел придерживаться раскадровки, поэтому я не хотел идти по этому пути.

второго нюанса, то iAdSuite материала @ipwnstuff указал на это не сразу раскадровку дружелюбный. он создает UISplitViewController программно, и вы должны предоставить мастер и детализацию либо через .xib или программно., так как я был работающая раскадровка, в которую я хотел интегрировать iAds, я хотел расширить ее. Кроме того, решение iAdSuite не скрывает главный вид в портретном режиме, и я все еще хотел этого.

так что ... начиная существующий файл iPad.storyboard, а затем интегрировать с образцом SplitBanner из с iAdSuite следующим образом:

UISplitViewController *splitViewController = (id)self.window.rootViewController; 
    splitViewController.delegate = (id)splitViewController.detailUIViewController; 
    CGRect splitViewFrame = splitViewController.view.frame; 
     splitViewFrame.origin.y -= application.statusBarFrame.size.height; 
     splitViewFrame.size.height += application.statusBarFrame.size.height; 
    splitViewController.view.frame = splitViewFrame; 

    // initWithContentViewController: the thing that's in the iAdSuite SplitViewBanner example 
    self.bannerViewController 
     = [[BannerViewController alloc] initWithContentViewController:splitViewController]; 
    self.window.rootViewController = self.bannerViewController; 

я был, таким образом, в состоянии использовать раскадровку UISplitViewController как childViewController в BannerViewController предоставленной iAdSuite.

ОК, третья оговорка: есть один сбой, и если у вас есть обычная настройка бара с помощью настройки splitViewControllerDelegate, делегат не будет вызываться, если вы вращаетесь во время объявления, и поэтому кнопка временно пока не появится или не появится, когда это предполагается.

+0

Я хочу показать iAd в splitViewController, как в iAdSuite от apple. Но я использую раскадровку. В вашем объяснении отсутствует способ интеграции iAd в splitviewcontroller с раскадрой для ландшафтного режима. Не могли бы вы мне помочь? –

Смежные вопросы