Slide 1

Slide 1 text

$MPOJOHQIPUPTBQQqVJEJOUFSGBDF .BTBNJDIJ6FUB 4PGUXBSF&OHJOFFSJ04BUNFSQBZ (JU)VC5XJUUFS!NBTBNJDIJVFUB .FSQBZ5FDI5BMLGPSJ04&OHJOFFS

Slide 2

Slide 2 text

w 'MVJEJOUFSGBDFʹ͍ͭͯ w %FTJHOJOH'MVJE*OUFSGBDFT88%$ w 'MVJE*OUFSGBDFͷྫ w ࣸਅΞϓϦͷ'MVJE*OUFSGBDFΛΫϩʔϯͯ͠Έͨ

Slide 3

Slide 3 text

৴༻Λ૑଄ͯ͠ɺͳΊΒ͔ͳࣾձΛ૑Δɻ #VJMEJOHUSVTUGPSBTFBNMFTTTPDJFUZ

Slide 4

Slide 4 text

J04͸ͲΜͲΜͳΊΒ͔ʹͳ͍ͬͯΔ w 'BDF*% w "QQMF1BZ w ύεϫʔυɺηΩϡϦςΟίʔυͷࣗಈೖྗ w J1IPOF9ͷδΣενϟʔ6*ʢϗʔϜʹ໭ΔɺΞϓϦ੾Γସ͑ʣ w FUD

Slide 5

Slide 5 text

7JEFP88%$%FTJHOJOH'MVJE*OUFSGBDFT

Slide 6

Slide 6 text

%FTJHOJOH'MVJE*OUFSGBDFT88%$ w "QQMF)VNBO*OUFSGBDF%FTJHO5FBNͷϝϯόʔʹΑΔൃද w J1IPOF9ͷ'MVJE(FTUVSF*OUFSGBDFΛ࡞ͬͨࡍͷ஌ݟΛݴޠԽͯ͠ڞ༗

Slide 7

Slide 7 text

ΠϯλϑΣʔεΛͳΊΒ͔ʹ͢Δʹ͸ʁ 8IBUNBLFTBOJOUFSGBDFGFFMqVJE w "UPPMUIBUGFFMTMJLF w BOFYUFOTJPOPGZPVSNJOE w BOFYUFOTJPOPGZPVSTFMG w BOFYUFOTJPOPGQIZTJDBMCPEZ ࣗ෼ͷ৺ମͷΑ͏ʹࣗ༝ʹײ͡Δ͜ͱ͕Ͱ͖Δ

Slide 8

Slide 8 text

৺ମΛ֦ு͢ΔΠϯλϑΣʔε *OUFSGBDFTUIBUFYUFOEPVSNJOET w ͙͢ʹ൓Ԡͯ͠ɺ͍ͭͰ΋໭ͬͨΓதஅͨ͠ΓͰ͖Δ *OTUBOUSFTQPOTFBOE DPOTUBOUSFEJSFDUJPOBOEJOUFSSVQUJPO

Slide 9

Slide 9 text

-JOFBS*OUFSGBDFTͱ1BSBMMFM*OUFSGBDFT 5IPVHIU ߟ͑Δ %FDJTJPO ܾΊΔ (FTUVSF δΣενϟʔ 3FMFBTF ऴΘΔ 5IPVHIU ߟ͑Δ %FDJTJPO ܾΊΔ (FTUVSF δΣενϟʔ 3FMFBTF ऴΘΔ -JOFBS*OUFSGBDFT໭ͬͨΓதஅͨ͠ΓͰ͖ͳ͍ɺҙࢥܾఆͷޙʹδΣενϟʔ͕ى͜Δ 1BSBMMFM*OUFSGBDFT໭ͬͨΓதஅͨ͠ΓͰ͖Δɺҙࢥܾఆͱฒߦͯ͠δΣενϟʔ͕ى͜Δ

Slide 10

Slide 10 text

ϗʔϜϘλϯͱJ1IPOF9ͷδΣενϟʔ

Slide 11

Slide 11 text

'MVJE*OUFSGBDFͷࣄྫ

Slide 12

Slide 12 text

ϋʔϑϞʔμϧ .FTTBHF 5XJUUFS 'BDFCPPL 4MBDL

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ϋʔϑϞʔμϧ w ϋʔϑϞʔμϧࣗମ͸'MVJE*OUFSGBDFͱ͍͏ΑΓ΋େܕԽʹ൐͏6*ͷมԽ ͩͱࢥ͍ͬͯΔ w SFTQPOTJWFͰSFEJSFDUBCMFͰJSSVQUBCMFͳδΣενϟʔͰૢ࡞Մೳ w εϫΠϓɾύϯɾλοϓ͝ͱͷ஄Έ NPNFOUVN Λ࢖ͬͨભҠ

Slide 15

Slide 15 text

4XJQFEVNQJOH 5BQEVNQJOH

Slide 16

Slide 16 text

ࣸਅΞϓϦ w ζʔϜભҠ w ύϥϥοΫε w ԼʹҾͬுͬͯ໭Δ w ্ʹҾͬுͬͯৄࡉ w εϥΠμʔ

Slide 17

Slide 17 text

'MVJE1IPUP w IUUQTHJUIVCDPNNBTBNJDIJVFUB'MVJE1IPUP

Slide 18

Slide 18 text

ζʔϜΠϯɾΞ΢τͷΠϯλϥΫγϣϯʹؔ͢ΔΫϥε class ZoomAnimator: UIViewControllerAnimatedTransitioning class ZoomDismissalInteractionController: UIViewControllerInteractiveTransitioning class ZoomTransitionController: UIViewControllerTransitioningDelegate, UINavigationControllerDelegate { let animator: ZoomAnimator let interactionController: ZoomDismissalInteractionController var isInteractive: Bool = false … }

Slide 19

Slide 19 text

ζʔϜΞχϝʔγϣϯ લͷϑϨʔϜ ޙͷϑϨʔϜ

Slide 20

Slide 20 text

ζʔϜΞχϝʔγϣϯ transitionImageView = UIImageView(image: referenceImage) transitionImageView.contentMode = .scaleAspectFill transitionImageView.clipsToBounds = true transitionImageView.frame = fromReferenceImageViewFrame containerView.addSubview(transitionImageView) … UIView.animate( withDuration: transitionDuration(using: transitionContext), delay: 0, options: [], animations: { … self.transitionImageView?.frame = finalSize … }, completion: { completed in … self.transitionImageView?.removeFromSuperview() … } )

Slide 21

Slide 21 text

ԼʹҾͬுͬͯ໭Δ എܠ͕ಁ͚ͯ͘Δ ը૾ͷαΠζ͕খ͘͞ͳΔ ্ʹ཭͢ͱݩʹ໭Δ ͦͷ··཭͢ͱҰཡʹ໭Δ

Slide 22

Slide 22 text

ԼʹҾͬுͬͯ໭Δ @objc func didPanWith(gestureRecognizer: UIPanGestureRecognizer) { switch gestureRecognizer.state { case .began: transitionController.isInteractive = true let _ = navigationController?.popViewController(animated: true) case .ended: if transitionController.isInteractive { transitionController.isInteractive = false transitionController.didPanWith(gestureRecognizer: gestureRecognizer) } default: if transitionController.isInteractive { transitionController.didPanWith(gestureRecognizer: gestureRecognizer) } } } 7JFX$POUSPMMFS

Slide 23

Slide 23 text

func didPanWith(gestureRecognizer: UIPanGestureRecognizer) { … let verticalDelta = translatedPoint.y < 0 ? 0 : translatedPoint.y let backgroundAlpha = backgroundAlphaFor(view: fromVC.view, withPanningVerticalDelta: verticalDelta) let scale = scaleFor(view: fromVC.view, withPanningVerticalDelta: verticalDelta) // update background alpha, scale, center … transitionContext.updateInteractiveTransition(1 - scale) if gestureRecognizer.state == .ended { let velocity = gestureRecognizer.velocity(in: fromVC.view) if velocity.y < 0 || center.y < anchorPoint.y { // cancel interactive transition … return } // start zoom out animation … } } ;PPN%JTNJTTBM*OUFSBDUJPO$POUSPMMFS

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

w 2JJUB w J04ͷࣸਅΞϓϦͷΑ͏ͳը໘ભҠͱΠϯλϥΫγϣϯΛ࣮૷͢Δ w .FEJVN w $SFBUFUSBOTJUJPOBOEJOUFSBDUJPOMJLFJ041IPUPTBQQ w (JU)VC w 'MVJE1IPUP w 88%$ w %FTJHOJOH'MVJE*OUFSGBDFT

Slide 26

Slide 26 text

l0VSJOUFSGBDFTOFFEUPCFqVJECFDBVTFXFBSFqVJEz