iOS开发(OC)

SKStoreProductViewController上面嵌套

2018-12-14  本文已影响0人  廖燊

前言:

公司产品需要完成像腾讯新闻中信息流中,上面播放视频广告,下面嵌套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的高度即可。

上一篇下一篇

猜你喜欢

热点阅读