【问题标题】:iOS: Universal App Template supporting iAds & screen rotationsiOS:支持 iAd 和屏幕旋转的通用应用模板
【发布时间】:2011-03-26 16:30:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone iad universal-binary


    【解决方案1】:

    最小部署目标
    第一个问题是:什么是合理的最小部署目标?鉴于这是一个通用应用,我们应该使用 iOS 4.2,因为这是第一个在 iPhone 和 iPad 之间统一的版本。 p>

    问题出现了:我们会失去多少点击广告的客户?例如,为了获得额外 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获取新尺寸

    【讨论】:

    • 注意:虽然这不能回答问题,但它与主题相关,因此可能对某人有用
    【解决方案2】:

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

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

    折腾了好久,也就是iAd -- cannot click banner

    但它现在状态很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多