我试图在两个视图控制器之间进行自定义转换。首先,这是一张图片来说明我想要的:
我想要一个 UICollectionViewCell 扩展到整个屏幕。在此单元格中,子视图通过 IB 中的自动布局放置。
我只想让每个子视图转到新位置。所以我尝试了subview.frame = newSubview.frame
在动画块中,但它不起作用(我认为是因为自动布局)。
我想在动画发生时删除约束,但它不起作用。
我还尝试对约束进行 @IBOutlets 并更改常量属性。
这是我的代码:
let detailView = detailViewController.view
let cellView = self.selectedCell
container.addSubview(cellView!)
let duration = self.transitionDuration(transitionContext)
UIView.animateWithDuration(duration, delay: 0.0, options: .CurveEaseInOut, animations: {
let newFrame = detailViewController.view.frame
cellView!.frame = newFrame
cellView!.imageView.frame = newFrame
cellView!.labelTopConstraint.constant = 27
cellView!.labelRightConstraint.constant = 8
cellView!.layoutIfNeeded()
}
...
实际上,当动画开始时,标签捕捉到一个位置,然后它们移动,最后它们不在正确的位置......
有任何想法吗 ?谢谢
查看此存储库,我认为这就是您正在寻找的 BCMagicTransition:https://github.com/boycechang/BCMagicTransition https://github.com/boycechang/BCMagicTransition
您的代码的问题是,您没有将要设置动画的集合视图单元格的子视图的帧转换为过渡的容器视图控制器的坐标,并且与其位置的最终帧相同。即使您使用自动布局,您仍然可以使用视图的框架来操作视图。
要实现此目的,请检查此方法(文档 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instm/UIView/convertRect:fromView:):
func convertRect(rect: CGRect, fromView view: UIView?) -> CGRect
您还应该研究您想要动画的视图的动画快照。然后只需将快照添加到容器视图中,并将它们设置为转换后的最终帧的动画,然后在动画完成时将其删除。
希望这可以帮助 !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)