【问题标题】:Animating an iAd in and out without setting off the warning在不触发警告的情况下动画 iAd 进出
【发布时间】:2012-03-04 08:57:34
【问题描述】:

我正在为屏幕底部的 iAd 横幅设置动画(0.5 秒),然后在完成后将其从超级视图中移除。

只要我有动画,iAd 障碍收入就会出现在控制台中:

ADBannerView:警告横幅视图有广告,但可能会被遮挡。 每次横幅视图仅打印一次此消息。

代码很简单:(动画块中的行是问题)

[UIView animateWithDuration:0.5 animations:^{
    self.adBannerView.frame = CGRectSetY(self.adBannerView.frame, viewHeight);
} completion:^(BOOL finished) {
    [self.adBannerView removeFromSuperview];
}];

如果我只是忽略该消息,它会影响广告数量或我的应用收到的任何内容吗?

当我通过 -(void)bannerViewDidLoadAd:(ADBannerView *)banner 委托方法为广告的外观制作动画时也发生了这种情况,我只能通过使用该方法的 will 变体来停止显示警告,同时保持动画。

如何在屏幕上和屏幕外制作 iAd 动画?

【问题讨论】:

    标签: iphone objective-c animation uiview iad


    【解决方案1】:

    我有一段时间想知道同样的事情。我相信我想出了一个技巧,因为我这样做时没有收到任何警告。

    这是我的视图层次结构:

    UIView (same size as your iAd)
    |_ iAd (make sure to pin the height and width if using iOS 6 auto layout)
    |_ UIView (I create this dynamically and use it's presence to determine whether I should show or hide the iAd from the delegate)
    

    下面的代码操作我在 Interface Builder 中设置的自动布局约束。如果您不使用自动布局,则必须更改触发动画的内容。

    - (void)hideAdBanner {
        if (!__adBannerReverseSideView) {
            __adBannerReverseSideView = [[UIView alloc] initWithFrame:__adBannerView.frame];
            __adBannerReverseSideView.backgroundColor = [UIColor blackColor];
            __adBannerReverseSideView.opaque = YES;
    
            [UIView transitionFromView:__adBannerView toView:__adBannerReverseSideView duration:0.3
                    options:UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionCurveEaseInOut
                    completion:^(BOOL finished) {
                        [UIView animateWithDuration:0.3  animations:^{
                            __adBannerBottomConstraint.constant += __adBannerContainerView.frame.size.height;
                            [self.view layoutIfNeeded];
                        }];
                    }];
        }
    }
    
    - (void)showAdBanner {
        if (__adBannerReverseSideView) {
            [UIView animateWithDuration:0.3
                animations:^{
                    __adBannerBottomConstraint.constant -= __adBannerContainerView.frame.size.height;
                    [self.view layoutIfNeeded];
                }
                completion:^(BOOL finished) {
                    [__adBannerView setNeedsLayout];
                    [UIView transitionFromView:__adBannerReverseSideView toView:__adBannerView duration:0.3
                            options:UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionCurveEaseInOut
                            completion:^(BOOL finished) {
                               [__adBannerReverseSideView removeFromSuperview];
                                __adBannerReverseSideView = nil;
                            }];
                }];
        }
    }
    

    隐藏代码将广告横幅转换为“反向”视图。您可以使用 options 参数更改动画类型。

    显示代码以另一种方式转换(从“反向”视图到广告横幅)。所有的动画都发生在与广告横幅大小相同的超级视图上。这样你的整个视图就不会动画了。

    将 iAd 留在 superview 中,不要删除它。这可能是警告的根本原因,但我不确定。

    然后这是我的 AD 委托方法:

    - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
        [self hideAdBanner];
    }
    
    - (void)bannerViewDidLoadAd:(ADBannerView *)banner {
        [self showAdBanner];
    }
    

    不要因为我没有检查错误变量而杀了我。我还没来得及写那段代码。

    关于在 iOS 6 自动布局中固定广告横幅视图的高度和宽度,如果您不这样做,当 iAd 动画回到原位时,左上角会向下和向右移动一半每次返回视图时,其父视图的高度和宽度。 :) 有趣的东西。

    【讨论】:

      【解决方案2】:

      警告不会对您的应用造成任何不利影响。广告无论是否在屏幕上都会加载,并且会调用委托方法。你做对了。该警告只是一个建议,因为尽管某些视图调整大小等,有些人可能希望广告显示,所以它只是建议广告应该始终在屏幕上。但同样,这是一个建议,而不是错误。

      【讨论】:

      • 我以为我在某处读到过,如果你得到的太多,Apple 会限制你得到的广告数量,从而减少广告收入。
      • 哇,我以前没听过那个。我会调查的。
      • 我可能会读到别的东西,不记得在哪里,直到今天早上我才读到:/
      • 如果您能在您的历史记录中找到该链接,我将有兴趣阅读它。我没有在网络上或在苹果公司找到任何暗示他们会因不展示广告而扣减你的报酬。
      • 其实我认为是关于取消广告。 (我浏览了很多网页,搜索历史并不是最简单的事情:))
      猜你喜欢
      • 2011-04-22
      • 2023-03-06
      • 1970-01-01
      • 2018-03-19
      • 2020-10-21
      • 1970-01-01
      • 2015-08-07
      • 2022-06-13
      • 1970-01-01
      相关资源
      最近更新 更多