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

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

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

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

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

  • представление содержимого немного сжимает верхнюю часть фрейма, чтобы освободить место для моего 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
}

person P i    schedule 26.03.2011    source источник


Ответы (2)


Минимальная цель развертывания
Первый вопрос: какова разумная минимальная цель развертывания? Учитывая, что это универсальное приложение, мы должны используйте 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
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
0,__IPHONE
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
2); extern NSString * const ADBannerContentSizeIdentifier480x32 __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
0,__IPHONE
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
2); extern NSString * const ADBannerContentSizeIdentifierPortrait __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
2); extern NSString * const ADBannerContentSizeIdentifierLandscape __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE
[self.adBannerView setCurrentContentSizeIdentifier: isLandscape ? strLandscape : strPortrait ];
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 и получить новый размер.

person P i    schedule 26.03.2011
comment
ПРИМЕЧАНИЕ: хотя это не отвечает на вопрос, но связано с темой, поэтому, возможно, кому-то будет полезно. - person P i; 26.03.2011

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

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

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

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

person P i    schedule 04.04.2011