SKStoreProductViewController上面嵌套
前言:
公司产品需要完成像腾讯新闻中信息流中,上面播放视频广告,下面嵌套App Store下载内嵌页面
如图:
由于第一次接触,采用的是SKStoreProductViewController,只要传入APP ID就可以在应用中模态弹出一个内嵌页面代码如下:
SKStoreProductViewController *productVC = [[SKStoreProductViewController alloc] init];
productVC.delegate =self;
[KeyWindow.rootViewController presentViewController:productVC animated:YEScompletion:nil];
[productVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:itunesId}completionBlock:^(BOOLresult, NSError *_Nullableerror) {
}];
__block RACDisposable *handler = [[productVC rac_signalForSelector:@selector(productViewControllerDidFinish:) fromProtocol:@protocol(SKStoreProductViewControllerDelegate)] subscribeNext:^(RACTuple * _Nullable x) {
RACTupleUnpack(SKStoreProductViewController* productViewController) = x;
[KeyWindow.rootViewController dismissViewControllerAnimated:YEScompletion:nil];
productVC.delegate =nil;
[handler dispose];
}];
那么问题就来了,如何在上面添加的视频播放视图被遮挡住了,就会出现这种情况如图:
一开始是想着用两个导航栏,或者两个控制器添加到原来的控制器里面,走了很多弯路,浪费了两天时间,看了SKStoreProductViewController的源码,只有几个方法。最后在朋友帮助下,用了一个取巧的办法,就是在模态弹出控制器后,将视图里面的子view的fram下移,记住这里说的是子view,如果你之间下移self.viewd 话会出现上半部分无法点击。这里关系到响应链的问题,自己百度哈,就不啰嗦,之间上代码:
//修改字视图frame
[selfpresentViewController:productVC animated:YEScompletion:^{
for(inti =0; i < productVC.view.subviews.count; i++) {
UIView *subView = productVC.view.subviews[i];
subView.frame = CGRectMake(0, kPtBy2xScale(self.playViewHeiht), ScreenW, ScreenH - kPtBy2xScale(self.playViewHeiht));
}
}];
view.subviews 就是拿到控制器里面的字view再进行下移,就可以得到想要的结果啦。
然后在上面添加视频播放器,就可以实现如图的效果:
这里需要注意的一点是,如果出现视图无法滚动到最底层,那是因为我们把视图下移了,只要修改,view,fram的高度即可。