Swift Zoom Transition Animation仅在第二次使用

时间:2015-06-28 11:17:34

标签: ios swift animation uiviewanimation uiviewanimationtransition

我创建了自定义转换,NSZoomTransitionAnimator。

我遇到的问题是,仅在第二次goBack时转换不起作用。

例如,我在集合视图中触摸了一个单元格(indexPath.row = 0)。第一次正常工作,但第二次没有工作。

我调试代码,发现sourceImageView.frame第二次是(0.0,0.0,360.0,480.0)。

(0.0,0.0,360.0,480.0)是正确的。

这是我的代码,NSZoomTransitionAnimator.swift。

UIView.animateWithDuration(kBackwardAnimationDuration, delay: 0, options: .CurveEaseOut, animations: {
  sourceImageView.frame = destinationImageViewFrame
  println(sourceImageView.frame)//(0.0, 64.0, 187.5, 187.5)

}, completion: {(finished: Bool) in
  if finished {
      destinationImageView.removeFromSuperview()

      println(sourceImageView.frame)//(0.0, 0.0, 360.0, 480.0)
      sourceImageView.removeFromSuperview()
  }
  transitionContext.completeTransition(finished)
})

这是我的存储库 https://github.com/naoyashiga/NSZoomTransitionAnimator

触摸集合视图中的图像,然后触摸DetailViewController中的关闭按钮。所以过渡将开始。

请告诉我为什么过渡不能仅在第二次工作。

1 个答案:

答案 0 :(得分:1)

您无法重复使用具有两个约束的sourceViewController.transitionSourceImageView()

(lldb) po sourceImageView.constraints()
[
<NSContentSizeLayoutConstraint:0x7feaeb7097a0 H:[UIImageView:0x7feaeb577230(360)] Hug:251 CompressionResistance:750>, 
<NSContentSizeLayoutConstraint:0x7feaeb704680 V:[UIImageView:0x7feaeb577230(480)] Hug:251 CompressionResistance:750>
]

所以它的大小不正确。相反,你可以改变

sourceImageView = sourceViewController.transitionSourceImageView()

sourceImageView.image = sourceViewController.transitionSourceImageView().image
sourceImageView.frame = sourceViewController.transitionSourceImageView().frame

这将解决您的问题。