Swift 缩放过渡动画仅在第二次不起作用
Swift Zoom Transition Animation is not working in only second time
我创建了自定义过渡 NSZoomTransitionAnimator。
我有一个问题,就是在第二次返回时转换不工作。
例如,我在集合视图中触摸了一个单元格 (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 中的关闭按钮。所以过渡将开始。
请告诉我为什么转换只在第二次不起作用。
您不能重复使用有两个约束的 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
这将解决您的问题。
我创建了自定义过渡 NSZoomTransitionAnimator。
我有一个问题,就是在第二次返回时转换不工作。
例如,我在集合视图中触摸了一个单元格 (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 中的关闭按钮。所以过渡将开始。
请告诉我为什么转换只在第二次不起作用。
您不能重复使用有两个约束的 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
这将解决您的问题。