0

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

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

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

每当广告出现和消失时,{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
}
4

2 回答 2

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

于 2011-03-26T20:10:09.000 回答
0

https://github.com/pi-/iAdUniversalTemplate

这是一个没有 XIB 的通用应用程序 iAd-rotatey-enabled 模板,它需要 iOS 4.2 的最低目标

折腾了好久,就是iAd——不能​​点击banner

但它现在状态很好。

于 2011-04-04T05:21:03.883 回答