iOS:支持iAds&amp ;;的通用应用模板屏幕旋转

时间:2011-03-26 16:30:12

标签: iphone iad universal-binary

我正在尝试构建一个透明地处理iAds& amp;的iOS通用应用程序模板。屏幕旋转。

即。而不是为每个新项目使用UIViewController,我将使用我自己的iAdVC(它将子类UIViewController)。这将无缝地处理iAd,并将剩余的窗口空间移交给用户。

我正在尝试这个:视图控制器包含uberView,其中包含{adView,内容视图}。

每当广告出现并消失时,{adView,内容视图}都会设置动画:

  • 内容视图将框架的顶部向下压扁,为我的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 个答案:

答案 0 :(得分:0)

最低部署目标
第一个问题是:什么是合理的最低部署目标?看到这是一个通用的应用程序,我们应该使用iOS 4.2,因为这是iPhone和iPad之间统一的第一个版本。

问题出现了:我们失去了广告点击客户的哪一部分?例如,为了获得额外15%的客户,是否值得支持4.0?

http://insights.chitika.com/2011/ios-update-ipads-iphones-running-high-rate-of-ios-4/表示,如果选择4.2,您仍会获得80%的广告点击客户。

显然这部分会随着时间的推移而增加,所以我会选择最简单的编码选项,而不是试图将每一分钱都挤出市场。

这有一个额外的好处:

// 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 并获取新尺寸

答案 1 :(得分:0)

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

这是一款支持XIB的通用应用iAd-rotatey模板,需要最低目标iOS 4.2

经过大量的抨击,即iAd -- cannot click banner

但现在情况良好。