iOS: универсальный шаблон приложения, поддерживающий iAds и поворот экрана
Я пытаюсь создать универсальный шаблон приложения для iOS, который прозрачно обрабатывает iAds и поворот экрана.
то есть вместо того, чтобы использовать UIViewController для каждого нового проекта, я вместо этого буду использовать свой собственный iAdVC (который будет подкласс UIViewController). Это позволит беспрепятственно обрабатывать iAds и передавать оставшееся пространство окна пользователю.
Я пытаюсь это: контроллер представления содержит uberView, который содержит {adView, представление содержимого}.
всякий раз, когда объявление появляется и исчезает, оба параметра {adView, view content} будут анимированы:
- представление контента, слегка сдавливая верхнюю часть фрейма, чтобы освободить место для моего iAd,
и исчезнуть в объявлении вдоль верхней части одновременно.
Кроме того, каждый раз, когда устройство вращается, размеры должны быть изменены.
У меня действительно тупая проблема, когда первое объявление показывается, я помещаю его в верхнюю часть экрана и раздавливаю оставшийся фрейм контента, чтобы освободить место для него.
но если я изменю фрейм представления контента, я больше не могу нажимать на объявление. и если я этого не сделаю, представление контента не помещается в своем окне,
- (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 и получить новый размер