HeyZap原生广告在UICollectionView集成



我正在尝试将HeyZap原生广告中介集成到我的UICollectionView中。我使用的是用IB构建的细胞,但是当我试图分配nativeAd。wrapperView到我自己的wrapperView在cell中它只是不响应任何点击或手势。下面是我的代码:

cell.hzNativeAd = ...; //Here I assign HZMediatedNativeAd to my cell property
cell.hzNativeAd.presentingViewController = self;
cell.hzNativeAd.shouldShowFacebookAdChoicesView = NO;
//Saving frame, because when I assign HeyZap wrapperView to my UIView frame is 0
CGRect wrapperViewFrame = cell.wrapperView.frame;
cell.wrapperView = cell.hzNativeAd.wrapperView;
cell.wrapperView.frame = wrapperViewFrame;
/*Assigning all labels and images
...
...
...
 */
//Registering Views with HZMediatedNativeAdViewRegisterer
[cell.hzNativeAd registerViews:^(id<HZMediatedNativeAdViewRegisterer>registerer) {
     [registerer registerTitleView:cell.titleLabel tappable:YES];
     [registerer registerBodyView:cell.descriptionLabel tappable:YES];
     [registerer registerCallToActionView:cell.actionButton];
     [registerer registerIconView:cell.imageView tappable:YES];
     [registerer registerCoverImageView:cell.coverImageView tappable:YES];

从HeyZap文档(https://developers.heyzap.com/docs/ios_sdk_native_mediation#step-3-show-native-ads)我可以找到如何以编程方式做到这一点。但在iPad上进行测试时,这样做的结果非常糟糕。我正在创建视图,然后添加约束,然后注册这个视图,然后在准备重用时删除所有这些视图-所有这些都需要时间,我在iPad上有很多延迟。HeyZap Support不回复…

所以也许有人也面临这个问题…还是我这样分配wrapperView时做错了什么?

谢谢你的帮助!

我是Heyzap的iOS工程师。首先让我为原生广告整合的复杂性道歉——在广告网络之间创建一个一致的界面真的很难,而且由于AdMob需要包装视图和注册视图,它至少必须如此复杂。无论如何,以下是我认为你的代码中的问题:

  1. 这一行:cell.wrapperView = cell.hzNativeAd.wrapperView;将不能正常工作。那只是取单元格的wrapperView指针并改变它指向的东西,但它并没有改变单元格的实际子视图-你需要在某些时候将Heyzap包装器视图添加到视图层次结构中,以便它响应手势。我可能会这样做:

    [cell.wrapperView removeFromSuperview]; // Temporarily remove your wrapper view from the view hierarchy, since when you load a new cell from a storyboard, it'll be a subview of the `contentView` property.
    cell.hzNativeAd.wrapperView.frame = cell.wrapperView.frame;
    [cell.contentView addSubview: cell.hzNativeAd.wrapperView];
    [cell.hzNativeAd.wrapperView addSubview: cell.wrapperView];
    

(你可能想把你的wrapperView属性重命名为其他东西,以消除它与Heyzap的歧义)。

prepareForReuse而言,您应该能够做这些事情:

  1. 从Heyzap包装器视图中删除您自己的包装器视图:[self.wrapperView removeFromSuperview];
  2. 从视图层次结构中删除Heyzap包装器视图:[cell.hzNativeAd.wrapperView removeFromSuperview];
  3. nil out your native ad reference: self.hzNativeAd = nil; .
  4. Call super: [super prepareForReuse];

很抱歉迟了回复。上个星期一是美国独立日,所以Heyzap的大多数员工都不在办公室。

如果你还有问题就告诉我;如果有必要,我可以用Skype和你聊天。

相关内容

  • 没有找到相关文章

最新更新