【问题标题】:Partial Curl transition for modal seque in iOS 8iOS 8 中模态转场的部分卷曲过渡
【发布时间】:2014-09-10 09:52:31
【问题描述】:

我用两个 VC 创建了一个简单的应用程序。
我通过按钮从第一个 VC 打开第二个 VC。 Seque 是“Present Modally”,过渡是“Partion Curl”。此方案在 iOS7 上运行良好,但在 iOS8 上,第一个 VC 的视图在 curl 动画结束时消失:

【问题讨论】:

  • 这在 iOS 10 (Xcode 8.3 beta) 中仍然存在。将过渡改为水平翻转是我摆脱它的方法。

标签: ios objective-c ios8


【解决方案1】:

我也有同样的问题。我在 Xcode 6 (beta 7) + iOS 8 (beta 5) 中看到了它。仍然存在于两者的转基因种子中。

iOS 7.1 细节:

它被称为“部分卷曲”,在 iOS 7 上它显示为这样(例如,部分 - 您仍然可以在窗口顶部看到原始视图的一部分)。在 iOS 7 上 - 当您点击这个部分暴露的“原始”视图时,视图会展开回原始的完整窗口。

iOS 8 细节:

转场确实留下任何原始展示。并且在窗口/屏幕上任意点按,通过自动展开返回原始视图。如果您在视图上有一个 UITextField,当您点击它输入一个值时……原始视图会返回,而不会触发任何相关的 UITextField 方法。没有显示键盘,它只是展开到原始视图。

在我看来,与原始视图的部分显示角相关联的触摸定义被错误定义为整个窗口。

当然,我对 iOS 编程很陌生,所以我的洞察力,如果准确的话,并不能告诉我如何解决它!大声笑我希望那里的人有知识至少可以提供可用的解决方法。

吉姆

附:我还没有足够的声誉点来投票或发表评论,因此我的回答不是答案。

【讨论】:

  • “任意点击,任意位置”仅在屏幕的上半部分(在我的情况下 - 在 iPad mini 视网膜上)
【解决方案2】:

这可能是一个错误,或者(恕我直言)Apple 表示此 ModalTransitionStyle 即将被弃用。由于它可能是伪态的最后残余,我认为这是一个安全的赌注,它是这个世界的缩写。关于模态呈现的视图控制器上的不一致触摸问题,我已经调试了几个小时,使用这种过渡并拉出我的头发。我切换到另一种模态转换样式和 POOF - iOS8 引起的所有问题都消失了。

基思

【讨论】:

  • Apple 根本没有提到任何(部分)页面卷曲效果的弃用。所以这对我来说是一个 iOS 8 错误 ;-) 这真的很糟糕。完全相同的构建在 iOS 7 上完美运行,但在 8 上却不行 -.-
  • 我也认为这是一个错误,但不幸的是它已经有一段时间没有得到解决,甚至在对 Xcode 进行了几次更新之后也是如此。因此,如果它本身是一个“错误”,那么苹果似乎要么不知道,要么出于任何原因不愿纠正它。我很好奇这个问题是否仅限于情节提要,或者如果手动调用 segue 也会表现出这种行为。有机会我会尝试一下,但如果有人已经有并且可以确认...?
  • 没关系。我尝试手动调用以及尝试在情节提要之外构建它,除非您打算编写自己的过渡效果(即覆盖“执行”),否则这不起作用。似乎这首先破坏了使用罐装 segue 的意义。我想现在我们必须手动重新创建这种效果,或者重新设计应用程序以其他方式呈现目标视图控制器。我目前没有看到另一种解决方法,也没有任何解释为什么现在失败了,而它过去只是很好用。
  • 这个问题在 iOS 9 beta 中依然存在。
【解决方案3】:

这个问题的简单解决方法是。

- (void)viewDidAppear:(BOOL)animated
{

    [super viewDidAppear:animated];

    for(UIGestureRecognizer *gesture in [self.view gestureRecognizers])
    {

        if([gesture isKindOfClass:[UIGestureRecognizer class]])
        {

            [self.view removeGestureRecognizer:gesture];

        }

    }

}

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。触摸屏幕上半部分的任意位置,导致模式关闭(展开)。换了动画,世界又恢复了平静。

    所以,绝对是 iOS8 中的一个错误。

    【讨论】:

      【解决方案5】:

      您需要找到一个包含 UIDismissCurlUpTapGestureRecognizer 的超级视图,该超级视图是您要禁用该手势识别器的视图。以我为例:

      po self.view.superview?.superview?.superview?.gestureRecognizers

      ▿ 可选> ▿ 一些:2 个元素 - [0] : ;目标= UINavigationInteractiveTransition 0x15826e2e0>)>> - [1] : UIDismissCurlUpTapGestureRecognizer: 0x15838a2c0;状态=可能;查看 = ;目标= >

      所以我用这部分代码删除了那个手势识别器:

      override func viewDidAppear(animated: Bool) {
          super.viewDidAppear(animated)
      
          if (self.view.superview?.superview?.superview != nil){
              if (self.view.superview!.superview!.superview!.gestureRecognizers != nil){
                  for gestureRecognizer in self.view.superview!.superview!.superview!.gestureRecognizers!{
                      if (gestureRecognizer.isKindOfClass(UITapGestureRecognizer)){
                          self.view.superview!.superview!.superview!.removeGestureRecognizer(gestureRecognizer)
                      }
      
                  }
              }
          }
      
      }
      

      注意:在 viewDidAppear 中执行此操作非常重要,因为视图在加载周期的早期并不知道其父视图。

      【讨论】:

        【解决方案6】:

        我也追了好几天这个BUG!事实证明,您仍然可以成功使用 Partial Curl;仅在检查动画框时才会出现此问题。取消选中动画框,您就可以开始了!

        【讨论】:

        • 如果你这样做,你根本就没有卷曲动画了。所以这破坏了整个观点。
        猜你喜欢
        • 2020-09-23
        • 1970-01-01
        • 2018-05-28
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 2012-02-28
        相关资源
        最近更新 更多