我正在尝试使用Pop-in效果在UIViewControllers
之间进行转换动画。
在我的animateTransition(using transitionContext:)
函数中:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
if let toController = transitionContext.viewController(forKey: .to) {
let toView = toController.view!
let finalFrame = transitionContext.finalFrame(for: toController) // (20, 20, 200, 200)
containerView.addSubview(toView)
toView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
UIView.animate(withDuration: self.duration, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.0, options: .allowAnimatedContent, animations: {
toView.frame = finalFrame
}, completion: {(completed: Bool) -> Void in
transitionContext.completeTransition(completed)
})
}
}
我原以为框架的大小会从100 by 100
变为200 by 200
。但它没有。
我发现此功能可以在转换时为框架的位置设置动画,但不能为尺寸(宽度或高度)设置动画。如何设置框架大小的动画?
答案 0 :(得分:1)
您可以尝试此操作,而不是更改使用新尺寸设置新框架
UIView.animate(withDuration: self.duration, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.0, options: .allowAnimatedContent, animations: {
toView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
}, completion: {(completed: Bool) -> Void in
transitionContext.completeTransition(completed)
})
答案 1 :(得分:1)
这可能是因为您可能在应用中使用了自动布局 布局引擎启动后,根据原始约束重新定位视图 尝试修改约束(或应用转换),而不是框架。使用自动布局修改框架几乎没用。