在ios 7和之前,我正在更新presentViewController.view.superview的边界以自定义呈现的视图控制器的大小,但似乎在ios 8中不再是这种情况。由于没有superview可以在视图控制器上设置(当你尝试在调试器中调用它时返回nil)。
有关如何更新显示的视图控制器大小的任何建议吗?这将用于自定义演示文稿转换。
答案 0 :(得分:16)
我想以下内容更容易,适用于iOS 8:
self.myViewController.modalPresentationStyle = UIModalPresentationFormSheet;
self.myViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
//This will be the size you want
self.myViewController.preferredContentSize = CGSizeMake(822, 549);
[self presentViewController:self.myViewController animated:YES completion:nil];
答案 1 :(得分:12)
如果有人后来碰到这个,我就是这样解决的。
对UIPresentationController进行子类化并在frameOfPresentedViewInContainerView中返回该帧。将其输入您为presentViewController创建的transitioningDelegate。
或者,您可以在animateTransition中设置presentView的最终帧:属于您为transitioningDelegate创建的动画对象。但是,这是旧iOS 7的做法。由于Apple引入了UIPresentationController,所以应该在那里进行任何大小/帧更改,这是我之前提到的方法。
以下是一些可能与解决问题无直接关系的额外信息。
对于那些从未接触到苹果视图控制器转换api的人,就像我之前一样,这里是步骤。
创建YourTransitioningDelegate,它符合UIViewControllerTransitioningDelegate。在这里,通常需要设置三件事,PresentationController,PresentedAnimationController,DismissedAnimationController。
创建符合UIViewControllerAnimatedTransitioning的YourTransitionAnimator。这里,需要覆盖两个函数,transitionDuration和animateTransition(这是所有动画发生的地方,添加/删除和动画显示的视图。让你在transitionContext上调用completeTransition来结束动画)。
子类UIPresentationController。取决于每个人的需求,你可以在这里做很多事情。我刚刚添加了dimmingView并更改了presentViewController的框架。
最后,在呈现视图控制器之前解决问题,即将modalPresentationStyle更改为自定义并设置转换委托。
我发现真正有用的东西,两个2014年WWDC视频("视图控制器改进"以及#34;查看演示控制器内部")和来自Apple的示例项目(LookInside-photoEditingApp)。
答案 2 :(得分:1)
您可以使用preferredContentSize属性
而不是子类SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_8,
SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};