当使用时关闭各种视图控制器时UIModalPresentationCustom,在取消视图控制器后屏幕变为黑色,就像所有视图控制器已从视图层次结构中删除一样.
正确设置了转换委托,正确地请求并传递了animationControllerForPresentedController,并在动画结束后完成转换.
这个确切的代码在使用iOS 7 SDK编译时非常有效,但在使用iOS 8b5编译时会破坏
我已经在我的iOS应用中实现了两个视图控制器之间的自定义过渡,并且在iOS 10、11和12上运行良好。
现在,我想使用Xcode 11 beta 6和iOS 13 beta 8为iOS 13做好准备,但是过渡很困难。
自定义过渡应将第一个视图控制器向上移动并移出屏幕,第二个视图控制器从下向上移出。但是现在它又回到了iOS13的默认呈现样式pageSheet,只是将第一个视图控制器缩小了一点,并添加了暗淡的叠加层。但是第二个视图没有出现。
我发现,在该方法animatePresentation(context: UIViewControllerContextTransitioning)中context不“从”视图返回,这样context.view(forKey: .from)的回报nil。
没有“从”角度看,我该怎么办?
FlyUpTransition.swift
class FlyUpTransition: NSObject, UIViewControllerAnimatedTransitioning {
var mode: Mode = .present
enum Mode {
case present
case dismiss
}
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return TimeInterval(0.45)
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
switch mode {
case .present:
animatePresentation(context: transitionContext)
case .dismiss:
animateDismissal(context: transitionContext)
}
}
func animatePresentation(context: UIViewControllerContextTransitioning) {
guard let fromView = …Run Code Online (Sandbox Code Playgroud) 我UIViewControllerTransitioningDelegate用来在两个视图控制器(从a MKMapView)到构建在(AVFoundation)上的自定义Camera 之间构建自定义转换.一切顺利,直到我打电话presentViewController,手机似乎挂了大约1秒钟(当我记录所有东西时).这甚至似乎发生在我转换到更简单的视图时(我有一个视图控制器只显示一个UITextview,甚至在实际调用转换之前似乎有大约.4 - .5秒的延迟).
这是我现在称之为过渡的方式
dispatch_async(dispatch_get_main_queue(), ^{
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
CameraViewController *cvc2 = [sb instantiateViewControllerWithIdentifier:@"Camera"];
cvc2.modalPresentationStyle = UIModalPresentationFullScreen; // Needed for custom animations to work
cvc2.transitioningDelegate = self; //Conforms to the UIViewControllerTransitioningDelegate protocol
[self presentViewController:cvc2 animated:YES completion:nil];
});
Run Code Online (Sandbox Code Playgroud)
这是我animateTransition打电话的方法.非常直接,目前呈现此视图的视图上只有一个MkMapView(没有其他视图或方法).
-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
if (self.type == MapAnimationTypePresent) {//From map to another view
UIView *containerView = [transitionContext containerView];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = …Run Code Online (Sandbox Code Playgroud) avfoundation uiviewcontroller mkmapview ios presentviewcontroller
我想知道如何安静一段时间如何创建iOS照片应用程序布局.我怎样才能使它看起来像放大到一个集合,同时导航栏显示一个后退按钮?
它是一个新的视图控制器,它被推送到UINavigationController?如果是这样,他们在扩展时如何设法匹配瓷砖.
甚至可能有第三方库让我轻松地重新创建这样的布局?
希望你能帮助我理解这是如何工作的概念.
transitions uinavigationcontroller ios uicollectionview swift
对于某些情况,我建议阅读:
非常相关的问题:"来自View Controller"使用UIViewControllerContextTransitioning消失 非常相关的答案:https://stackoverflow.com/a/25901154/751268
我正在尝试实现一个自定义视图控制器转换,动画新视图控制器覆盖屏幕的一半,同时将呈现视图控制器缩小到90%(在窗口中心,在呈现的视图控制器下面).
首先,我的问题是viewFromKey:返回nil.要解决这个问题,答案提到:
如果要为呈现视图控制器的视图设置动画,则应考虑使用
UIModalPresentationFullscreen样式或继续使用UIModalPresentationCustom并实现自己的子类,UIPresentationController并shouldRemovePresentersView返回YES.
我做到了,并且viewFromKey:不再返回nil,但现在呈现视图控制器完全消失(这是有道理的,考虑到我明确说它应该通过实现shouldRemovePresentersView).
我将呈现视图控制器的视图添加到容器视图,但它仍然被删除.还有什么我应该做的才能让这个工作?
这是一些相关的代码:
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
BOOL show = self.isPresentation;
UIView *menuView = show ? toView : fromView;
UIView *backView = show ? fromView : toView;
UIView *containerView = [transitionContext containerView];
[containerView addSubview:backView];
[containerView addSubview:dimmedView];
[containerView addSubview:menuView];
// Adjust transforms, alpha and perform animations …Run Code Online (Sandbox Code Playgroud) ios ×5
swift ×2
animation ×1
avfoundation ×1
cocoa-touch ×1
ios13 ×1
ios8 ×1
mkmapview ×1
objective-c ×1
transitions ×1
uikit ×1