在不设置警告的情况下动画播放和播放iAd

Jon*_*an. 2 iphone animation objective-c uiview iad

我在屏幕底部动画(0.5秒)一个iAd横幅,然后在完成后从它的超视图中删除它.

只要我有动画,iAd阻碍收益会出现在控制台中:

ADBannerView:警告横幅视图包含广告但可能会被遮挡.此消息仅在每个横幅视图中打印一次.

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

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

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

这也发生在我从-(void)bannerViewDidLoadAd:(ADBannerView *)banner委托方法动画广告的外观时,我只能通过使用该will方法的变体来保持动画的同时停止显示警告.

如何在屏幕上和屏幕外设置iAds动画?

Bra*_*ndy 5

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

这是我的视图层次结构:

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)
Run Code Online (Sandbox Code Playgroud)

下面的代码操作我在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;
                        }];
            }];
    }
}
Run Code Online (Sandbox Code Playgroud)

隐藏代码将AD横幅转换为"反向"视图.您可以使用options参数更改动画类型.

节目代码以另一种方式转换(从"反向"视图转换到AD横幅).所有动画都发生在超视图上,该视图与AD横幅相同.这样您的整个视图就不会生成动画.

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

那么这是我的AD代表方法:

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

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
    [self showAdBanner];
}
Run Code Online (Sandbox Code Playgroud)

不要因为没有检查错误变量而杀了我.我还没有开始编写代码.

关于在iOS 6自动布局中固定广告横幅视图的高度和宽度,如果在iAd动画回原位时没有,左上角将向下移动,向右移动高度和宽度的一半它的超级视图每次回到视图中.:) 好玩的东西.