我正在尝试将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需要包装视图和注册视图,它至少必须如此复杂。无论如何,以下是我认为你的代码中的问题:
-
这一行:
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
而言,您应该能够做这些事情:
- 从Heyzap包装器视图中删除您自己的包装器视图:
[self.wrapperView removeFromSuperview];
- 从视图层次结构中删除Heyzap包装器视图:
[cell.hzNativeAd.wrapperView removeFromSuperview];
-
nil
out your native ad reference:self.hzNativeAd = nil;
. - Call super:
[super prepareForReuse];
很抱歉迟了回复。上个星期一是美国独立日,所以Heyzap的大多数员工都不在办公室。
如果你还有问题就告诉我;如果有必要,我可以用Skype和你聊天。