使用UIView.transition()方法进行幻灯片切换

时间:2017-02-16 19:01:32

标签: ios swift animation swift3

我有和表格视图,当用户点击按钮时,我希望它重新加载它的数据并更改许多其他内容。遗憾的是,我的用户对过渡/动画的可用选项并不满意,并希望进行滑动过渡。但是,我在网上找不到任何东西。这是我的代码:

*

谢谢。

1 个答案:

答案 0 :(得分:2)

你可以在这上学:

  • 拍摄view;
  • 的快照
  • 将其添加到视图层次结构中;
  • 将偏移变换应用于快照视图和view本身;
  • 将主视图transform的恢复动画回.identity;和
  • 完成动画后删除快照视图。

因此:

let snapshotView = snapshot()
view.addSubview(snapshotView)
snapshotView.transform = CGAffineTransform(translationX: -view.bounds.size.width, y: 0)
view.transform = CGAffineTransform(translationX: view.frame.size.width, y: 0)

// do whatever updates to the views you want here
tableView.reloadData()

UIView.animate(withDuration: 0.5, animations: {
    self.view.transform = .identity
}, completion: { _ in
    snapshotView.removeFromSuperview()
})

对于快照,我使用了:

func snapshot() -> UIView {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
    view.drawHierarchy(in: view.bounds, afterScreenUpdates: false)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let imageView = UIImageView(image: image)
    imageView.frame = view.bounds
    return imageView
}

顺便说一下,你也可以使用比drawHierarchy更快的snapshotView(afterScreenupdates:),但由于某些原因它不能在7+模拟器中工作(参见https://forums.developer.apple.com/thread/63438)所以我对此并不是很满意。但是如果你想这样做,你可以用{:1>替换shapshotView声明

let snapshotView = view.snapshotView(afterScreenUpdates: false)!