Slide 1

Slide 1 text

UIPreviewInteraction : Overview 2016/06/22 ؔ੢ϞόΠϧΞϓϦݚڀձ

Slide 2

Slide 2 text

id:Sixeight @tomohi_ro

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Peek and Pop

Slide 5

Slide 5 text

2 ways • Storyboard Segue • UIViewControllerPreviewingDelegate

Slide 6

Slide 6 text

Storyboard Segue

Slide 7

Slide 7 text

Storyboard Segue override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "previewSegue" { // for preview } }

Slide 8

Slide 8 text

UIViewControllerPreviewingDelegate class ItemListViewController: UITableViewController, UIViewControllerPreviewingDelegate { // ... }

Slide 9

Slide 9 text

UIViewControllerPreviewingDelegate override func viewDidLoad() { super.viewDidLoad() registerForPreviewing(with: self, sourceView: tableView) }

Slide 10

Slide 10 text

UIViewControllerPreviewingDelegate Peek func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { guard let indexPath = tableView.indexPathForRow(at: location) else { return nil } let detailViewController = DetailViewController.instantiate() detailViewController.item = item(at: indexPath) let cellRect = tableView.rectForRow(at: indexPath) let sourceRect = previewingContext.sourceView.convert(cellRect, from: tableView) previewingContext.sourceRect = sourceRect return detailViewController }

Slide 11

Slide 11 text

UIViewControllerPreviewingDelegate Pop func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { show(viewControllerToCommit, sender: self) }

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

How?

Slide 15

Slide 15 text

Custom Transitioning • UIViewControllerTransitioningDelegate • UIViewControllerAnimatedTransitioning • UIViewControllerInteractiveTransitioning • UIPresentationController • UIGestureRecognizer

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

0.0 ʙ 1.0

Slide 18

Slide 18 text

UIPreviewInteraction

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

UIPreviewInteraction class DetailViewController : UIViewController { private var moreDetailPreviewInteraction: UIPreviewinteraction! private var moreDetailVC = MoreDetailViewController() // ... }

Slide 21

Slide 21 text

UIPreviewInteraction override func viewDidLoad() { super.viewDidLoad() moreDetailPreviewInteraction = UIPreviewInteraction(view: view) moreDetailPreviewInteraction.delegate = self }

Slide 22

Slide 22 text

UIPreviewInteractionDelegate extension DetailViewController : UIPreviewInteractionDelegate { }

Slide 23

Slide 23 text

UIPreviewInteractionDelegate • previewInteractionShouldBegin(_ previewInteraction: UIPreviewInteraction) -> Bool • previewInteraction(_ previewInteraction: UIPreviewInteraction, didUpdatePreviewTransition transitionProgress: CGFloat, ended: Bool) • previewInteraction(_ previewInteraction: UIPreviewInteraction, didUpdateCommitTransition transitionProgress: CGFloat, ended: Bool)

Slide 24

Slide 24 text

UIPreviewInteractionDelegate • previewInteractionDidCancel(_ previewInteraction: UIPreviewInteraction)

Slide 25

Slide 25 text

UIPreviewInteractionDelegate func previewInteractionShouldBegin(_ previewInteraction: UIPreviewInteraction) -> Bool { return presentedViewController != nil }

Slide 26

Slide 26 text

UIPreviewInteractionDelegate func previewInteraction(_ previewInteraction: UIPreviewInteraction, didUpdatePreviewTransition transitionProgress: CGFloat, ended: Bool) { // Initialize if presentedViewController != nil { present(moreDetailVC, animated: true) } // Update progress moreDetailVC.interactiveTransitionProgress = transitionProgress // Peek has finished if ended { moreDetailVC.completeCurrentInteractiveTransition() } }

Slide 27

Slide 27 text

UIPreviewInteractionDelegate func previewInteraction(_ previewInteraction: UIPreviewInteraction, didUpdateCommitTransition transitionProgress: CGFloat, ended: Bool) { // Update committing progress moreDetailVC.overInteractionProgress = transitionProgress // Pop has finished if ended { tailVC.overInteractionProgress = 0.0 } }

Slide 28

Slide 28 text

UIPreviewInteractionDelegate func previewInteractionDidCancel(_ previewInteraction: UIPreviewInteraction) { moreDetailVC.cancelCurrentInteractiveTransition() moreDetailVC.dismiss(animated: true) }

Slide 29

Slide 29 text

Conclusion (Japanese) • Preview ࣗମͷڍಈΛΧελϚΠζͰ͖ΔͷͰ͸ͳͯ͘ɺ3D Touch Ͱԡ͠ࠐΜͩͱ͖ͷ Preview ͷਐḿ۩߹Λऔಘग़དྷΔ • ࣮ࡍͷ Transition ͸͜Ε·Ͱͷํ๏Λͦͷ··࢖͑Δ • Cancel ͕औΕΔͷ͸خ͍͠ؾ͕͢Δ

Slide 30

Slide 30 text

References • https://developer.apple.com/videos/play/wwdc2016/228/ • https://developer.apple.com/reference/uikit/ uipreviewinteraction • https://developer.apple.com/reference/uikit/ uipreviewinteractiondelegate

Slide 31

Slide 31 text

കӍ͸δϝδϝͯ͠ݏͰ͢Ͷ