iOS 7 自定义转换故障

2024-01-06

该视频显示了我遇到的问题。http://www.youtube.com/watch?v=C9od_2KZAbs http://www.youtube.com/watch?v=C9od_2KZAbs

我正在尝试使用 UIPanGestureRecognizer 创建自定义推送交互式过渡。我有一个交互式过渡委托(使用 UIPercentDrivenInteractiveTransition)和一个过渡动画师。

以下是平移手势控制过渡的方式:

- (void) panGestureRecognized:(UIPanGestureRecognizer *) gestureRecogznier {

    CGPoint translation = [gestureRecogznier translationInView:gestureRecogznier.view];

    if (gestureRecogznier.state == UIGestureRecognizerStateBegan) {

        self.interactiveTransitionAnimator = [[UIPercentDrivenInteractiveTransition alloc] init];

        EVDetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"EVDetailViewController"];
        [self.navigationController pushViewController:detailViewController animated:YES];
    }
    else if (gestureRecogznier.state == UIGestureRecognizerStateChanged) {

        CGFloat d = (translation.x / CGRectGetWidth(self.view.bounds)) * -1;
        [self.interactiveTransitionAnimator updateInteractiveTransition:d];
    }
    else if (gestureRecogznier.state == UIGestureRecognizerStateEnded) {

        if ([gestureRecogznier velocityInView:self.view].x < 0) {
            [self.interactiveTransitionAnimator finishInteractiveTransition];
        } else {
            [self.interactiveTransitionAnimator cancelInteractiveTransition];
        }

        self.interactiveTransitionAnimator = nil;
    }
}

UINavigationControllerDelegate 处理两个转换委托对象的出售,当调用 pushViewController: 时会触发该对象。

过渡动画器有一个非常简单的动画:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {

    UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    [[transitionContext containerView] addSubview:toViewController.view];

    CGRect finalToVCFrame = [transitionContext finalFrameForViewController:toViewController];

    if (self.operation == UINavigationControllerOperationPush) {

        // set offscreen to the right
        toViewController.view.frame = CGRectMake(320.0f, 0.0f, 320.0f, 568.0f);

        [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0f options:0 animations:^{

            toViewController.view.frame = finalToVCFrame;

        } completion:^(BOOL finished) {

            // *** When this is called, the glitch occurs
            [transitionContext completeTransition:YES];
        }];
    }
}

在视频中,平移手势在大约 60% 处结束,这会触发 finishInteractiveTransition 调用。一切都很顺利,直到 UIView 基于块的动画中的完成块调用completeTransition:。调用此方法时,toViewController 会不必要地重新设置推送动画的最后部分。视频中红色视图是窗户。动画持续时间为 3 秒。

我不明白为什么会发生这种情况。看起来手势结束和调用completeTransition: 之间的动画发生了两次。有任何想法吗?


从 iOS 7.1 开始,我可以在模拟器中重现这一点,但不能在实际设备上重现。无论如何,似乎有一个解决方法:

self.interactiveTransitionAnimator.completionSpeed = 0.999;

有一个针对此错误的雷达:雷达://14675246 http://openradar.appspot.com/14675246

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 7 自定义转换故障 的相关文章

随机推荐

  • csv php mysql 数据导出 - 所有数据都导出在一列中

    我需要使用下面的 php 脚本将姓名 给定电话号码 移动注释位置全部放在我的 csv 导出的单独列中 当前代码将每条记录的所有选定数据导出到一列中 谢谢你 result mysql query SELECT who as Name Give
  • Jenkins Pipeline:如何转储错误?

    当尝试打印错误时 e getMessage 或在管道脚本中转储堆栈跟踪 我收到一条错误消息 指出这是不允许的 在这种情况下如何将错误输出到日志中 try deleteJob JOB NAME catch e emailError e get
  • 显示没有索引键的数组

    print r arraydata 我得到了输出 数组 0 gt vikas 1 gt 衬衫 2 gt 布料 1 3 gt 测试 4 gt 衬衫 5 gt 布料 2 6 gt avi 我需要这样显示数组 arr array vikas 衬衫
  • Chrome Inspector 中的 Javascript 调试:变量在手表和控制台中显示为未定义,但可以在悬停时进行检查

    在 Chrome 检查器中调试 AngularJS 时 我经常遇到这样的情况 当我知道某些变量已定义时 我可以通过在 Chrome 检查器中将鼠标悬停在它们上方来检查它们 他们也出现在 当地人 选项卡中 但是 当我尝试将它们添加到监视选项卡
  • 使用 ICommand 的按钮不会被禁用?

    我的 wpf mvvm 应用程序中有一个按钮控件 我用一个ICommand属性 在 viewmodel 中定义 将按钮单击事件绑定到 viewmodel 我有 gt 执行和canexecute我的参数ICommand执行 RelayComm
  • 如何使用 Java Mission Control 监控远程服务器中的 JVM?

    是否可以使用JMC 监控远程服务器中的 JVM 如果是这样我该怎么做 在使用之前是否需要调用任何特定的 java 标志 我尝试创建一个新的 JVM 连接 并指定向导中要求的所有详细信息 但是当我测试连接时它无法连接到该服务器 由于需要进行一
  • IIS 站点不断提示输入 Windows 身份验证方法的凭据

    我需要一些帮助来了解我无法在 IIS 站点上针对特定用户组使用 Windows 身份验证的确切原因 发生的情况是 即使我的用户属于我授予站点访问权限的组的一部分 IE 也会不断提示我输入凭据 甚至当我输入密码时 HTTP 响应也是 401
  • 如何使用库(插入符号)更改指标?

    我想使用以下方法将指标从 RMSE 更改为 RMSLE caret library 给定一些示例数据 ivar1 lt rnorm 500 mean 3 sd 1 ivar2 lt rnorm 500 mean 4 sd 1 ivar3 l
  • LINQ + Foreach 与 Foreach + If

    我需要迭代对象列表 仅对布尔属性设置为 true 的对象执行某些操作 我正在这段代码之间争论 foreach RouteParameter parameter in parameters Where p gt p Condition do
  • 使用 mod_wsgi 从不运行 Django 的站点提供 Django 应用程序 /

    我有一个网站 目前正在使用 Django 逐个应用程序重写 服务器是RedHat 运行 Apache 2 安装 mod wsgi 一切正常 惊人的 如果我去http www example com http www example com
  • preg_replace() 找不到结束分隔符?

    I use preg replace 很多 但我不是这方面的天才 如果我启动一个功能并故意键入我想要使用的所有表情符号 例如 但今天我尝试更改它并使用 mysql 让我可以随意插入和删除它们 而无需在我的代码中播放 但是当我尝试它时 它只会
  • Angular2:检测表单变化

    在 Angular2 4 0 中我有一个FormGroup看起来像这样 this form this fb group a Validators required b Validators required c Validators req
  • macOS 上的 NavigationLink 无法在同一视图中打开

    我目前正在构建一个 macOS 应用程序SwiftUI 无 Catalyst 应该有一个侧边栏和其右侧的单个视图 NavigationView List listStyle SidebarListStyle HomeView 我的主页视图有
  • Angular 4单个API请求运行多次

    我遇到有关 Angular 4 应用程序的问题 我创建了一个应用程序 其中的数据是从第三方 API 获取的 我遇到的问题是我的 API 多次调用 但我只发送了一次请求 经过一些研发后 我发现浏览器正在使用 OPTION 方法运行航班请求 但
  • Neo4j 中匹配/删除整个子图

    假设我的数据库中有一个大图 我想删除其中的整个子图 其中我只知道该子图的起始节点 是否可以编写一个密码查询来匹配并删除整个子图 警告 我不知道更多关于子图从哪个节点开始的信息 是的 您可以通过 APOC 程序从单个节点扩展到所有子图节点路径
  • 从源代码管理中丢失后如何生成新的 .pfx 文件?

    我正在使用 GitHub 托管我正在开发的开源 Windows 10 应用程序 我不小心忽略了应用程序的 PFX 文件 因此当我删除本地副本并重新克隆存储库时 我没有了MyApp TemporaryKey pfx文件 现在 Visual S
  • NLTK 上下文无关语法生成器

    我正在开发一个带有 Unicode 字符的非英语解析器 为此 我决定使用 NLTK 但它需要预定义的上下文无关语法 如下所示 S gt NP VP VP gt V NP V NP PP PP gt P NP V gt saw ate wal
  • 在 Web 应用程序和控制台应用程序之间共享配置设置

    我想与我的控制台应用程序 同一解决方案中的 2 个项目 共享我的 VS2010 3 5 Web 应用程序设置 例如连接字符串 smtp log4net 设置 这看起来很接近 http devlicio us blogs derik whit
  • PHP - 带 GET 查询的加号

    我有一个 PHP 脚本 它通过以下方法对字符串进行基本加密
  • iOS 7 自定义转换故障

    该视频显示了我遇到的问题 http www youtube com watch v C9od 2KZAbs http www youtube com watch v C9od 2KZAbs 我正在尝试使用 UIPanGestureRecog