iOS: универсальный шаблон приложения, поддерживающий iAds и поворот экрана

Я пытаюсь создать универсальный шаблон приложения для iOS, который прозрачно обрабатывает iAds и поворот экрана.

то есть вместо того, чтобы использовать UIViewController для каждого нового проекта, я вместо этого буду использовать свой собственный iAdVC (который будет подкласс UIViewController). Это позволит беспрепятственно обрабатывать iAds и передавать оставшееся пространство окна пользователю.

Я пытаюсь это: контроллер представления содержит uberView, который содержит {adView, представление содержимого}.

всякий раз, когда объявление появляется и исчезает, оба параметра {adView, view content} будут анимированы:

  • представление контента, слегка сдавливая верхнюю часть фрейма, чтобы освободить место для моего iAd,
  • и исчезнуть в объявлении вдоль верхней части одновременно.

    Кроме того, каждый раз, когда устройство вращается, размеры должны быть изменены.

У меня действительно тупая проблема, когда первое объявление показывается, я помещаю его в верхнюю часть экрана и раздавливаю оставшийся фрейм контента, чтобы освободить место для него.

но если я изменю фрейм представления контента, я больше не могу нажимать на объявление. и если я этого не сделаю, представление контента не помещается в своем окне,

http://d.pr/ZyQG

- (void) bannerViewDidLoadAd: (ADBannerView *) banner 
{   
    bool isLandscape = UIInterfaceOrientationIsLandscape( self.interfaceOrientation );
    NSString * contentSize = isLandscape ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifierPortrait ;

    [self.adBannerView setCurrentContentSizeIdentifier: contentSize];

    CGSize bannerSize = [ADBannerView sizeFromBannerContentSizeIdentifier: contentSize];
    self.adBannerView.frame = CGRectMake(0, 0, bannerSize.width, bannerSize.height);

    // resize content frame & fade ad in        
    CGRect newContentFrame = uberView.bounds;
    newContentFrame.size.height -= bannerSize.height;
    newContentFrame.origin.y += bannerSize.height;   

    NSLog(@"%@", NSStringFromCGRect(newContentFrame)); // {{0, 50}, {320, 430}}
    if (1) // 0 works
        self.contentView.frame = newContentFrame; // NOW CANT CLICK AD
}

2 ответа

Решение

https://github.com/p-i-/iAdUniversalTemplate

Это шаблон с поддержкой iAd-rotatey без универсального приложения XIB, для которого требуется минимальный целевой показатель iOS 4.2.

Потребовалось много усилий, а именно iAd - не может нажать на баннер

Но сейчас он в хорошей форме.

Минимальная цель развертывания
Первый вопрос: что является разумной целью минимального развертывания? Поскольку это универсальное приложение, мы должны использовать iOS 4.2, так как это первая версия, объединенная между iPhone и iPad.

Возникает вопрос: какую долю кликающих по рекламе клиентов мы теряем? Например, стоит ли поддерживать 4.0 только для того, чтобы получить дополнительные 15% клиентов?

http://insights.chitika.com/2011/ios-update-ipads-iphones-running-high-rate-of-ios-4/ показывает, что вы по-прежнему выбираете 80% кликающих по рекламе клиентов, если вы выбираете 4.2.

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

Это имеет дополнительное преимущество:

// Supported sizes of banner ads available from ad server. Dimensions are in points, not pixels.
// The dimensions are part of the value names to assist with design-time planning for view layout.
extern NSString * const ADBannerContentSizeIdentifier320x50 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_4_0,__IPHONE_4_2);
extern NSString * const ADBannerContentSizeIdentifier480x32 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_4_0,__IPHONE_4_2);
extern NSString * const ADBannerContentSizeIdentifierPortrait __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_2);
extern NSString * const ADBannerContentSizeIdentifierLandscape __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_2);

т.е. мы можем использовать новые символы, которые являются общими (т.е. работают как для iPhone, так и для iPad)

strPortrait = ADBannerContentSizeIdentifierPortrait; // ADBannerContentSizeIdentifier320x50;
strLandscape = ADBannerContentSizeIdentifierLandscape; // ADBannerContentSizeIdentifier480x32;

Баннер может быть как горизонтальным, так и вертикальным, поэтому вам необходимо загрузить:

[self.adBannerView setRequiredContentSizeIdentifiers:
    [NSSet setWithObjects: strPortrait, strLandscape, nil]
];  

Затем, когда экран поворачивается на 90°, AdBannerView нужно сказать:

[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];

Непосредственно после того, как это установлено, вы можете запросить self.adBannerView.frame и получить новый размер

Другие вопросы по тегам