Slide 1

Slide 1 text

UITableViewͷεΫϩʔϧʹ߹Θͤͯ UIViewControllerΛॎํ޲ʹ ϖʔδϯά͢Δ marty-suzuki

Slide 2

Slide 2 text

ࣗݾ঺հ Github: https://github.com/marty- suzuki Twitter: https://twitter.com/ marty_suzuki

Slide 3

Slide 3 text

MisterFusion https://github.com/marty-suzuki/ MisterFusion • Support Swift2.3 • Support Swift3

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

755ͷϗʔϜ <-> τʔΫϧʔϜͷભҠ • ϗʔϜͷϑΥϩʔϦετ͔ΒτʔΫ ϧʔϜ΁ભҠ • ϑΥϩʔϦετͷॱʹ࿈ಈͯ͠ɺॎ ํ޲ʹViewControllerΛભҠ

Slide 6

Slide 6 text

͜ͷભҠΛϥΠϒϥϦԽ͠·ͨ͠

Slide 7

Slide 7 text

HoverConversion https://github.com/marty-suzuki/ HoverConversion • ϢʔβʔϦετ͔ΒϢʔβʔͷTweet Ұཡ΁ભҠ • ϢʔβʔϦετͷॱʹ࿈ಈͯ͠ɺॎ ํ޲ʹViewControllerΛભҠ

Slide 8

Slide 8 text

ViewControllerͷߏ੒

Slide 9

Slide 9 text

HCContentViewController • HCPagingViewController্ʹදࣔ͞ ΕΔίϯςϯπΛѻ͏ViewController • UITableView͕viewʹରͯ͠ addSubview͞Ε͍ͯΔ

Slide 10

Slide 10 text

HCPagingViewController • ContainerViewΛ3͍ͭ࣋ͬͯΔ • addSubview͞Ε͍ͯΔॱ൪͸ɺ centerɺupperɺlower • HCPagingViewControllerͷviewͷ.height ͱ.widthʹରͯ͠.equalͷConstraint • upperͷ.bottom͕centerͷ.topʹର͠ ͯ.equalͰ0ͷConstraint • lowerͷ.top͕centerͷ.bottomʹର͠ ͯ.equalͰ0ͷConstraint

Slide 11

Slide 11 text

HCPagingViewController • ͦΕͧΕͷContainerViewʹ HCContentViewControllerͷview͕ addSubview͞Ε͍ͯΔ • ͦΕͧΕͷContainerView ʹ.topɺ.leftɺ.rightɺ.bottomʹର ͯ͠0ͷConstraint

Slide 12

Slide 12 text

ॎํ޲ͷભҠ • HCContentViewControllerͷ UITableViewΛ࠷Լ෦·ͰεΫϩʔϧ ͠ɺbounce͕30px΄Ͳͩͬͨͱ͢Δ • ͦͷࡍʹɺlowerͷ HCContentViewControllerͷ view.frame.origin.yΛ-30px1ʹ͢Δ 1 bounceྔ = tableView.contentOffset.y - (tableView.contentSize.height - tableview.bounds.size.height)

Slide 13

Slide 13 text

ॎํ޲ͷભҠ • ࿮ͰғΘΕͨ෦෼͕ը໘ʹදࣔ͞Εͯ ͍Δ෦෼ • upperͱcenterͷ HCContentViewControllerͷ view.frame.origin.y͸ม͑ͳ͍ • centerͷHCContentViewControllerͷ UITableView͕bounce͍ͯ͠Δ෦෼ ʹɺlowerͷHCContentViewController ͷview͕ॏͳ͍ͬͯΔͷͰɺ࿈ಈͯ͠ ͍ΔΑ͏ʹݟ͑Δ

Slide 14

Slide 14 text

ॎํ޲ͷભҠ • ContainerView͸centerɺupperɺ lowerͷॱͰaddSubview͞Ε͍ͯΔ ͷͰɺHCContentViewControllerͷ view΋ͦͷॱͰॏͳΔ

Slide 15

Slide 15 text

Ξχϝʔγϣϯ • centerͷHCContentViewController ͷUITableViewͷcontentOffset͸ݻ ఆͨ͠··ɺ͢΂ͯͷ HCContentViewControllerͷviewΛ bounceʹରͯ͠ద౰ͳ஋2ͰΞχϝʔ γϣϯͤ͞Δ 2 Ξχϝʔγϣϯͤ͞Δpx਺ = tableview.bounds.size.height - bounceྔ1

Slide 16

Slide 16 text

Ξχϝʔγϣϯ׬ྃޙ • ͢΂ͯͷHCContentViewController ͷviewΛremoveFromSuperview • lowerʹ͋ͬͨ HCContentViewControllerͷviewΛ centerʹaddSubview • centerʹ͋ͬͨ HCContentViewControllerͷviewΛ upperʹaddSubview

Slide 17

Slide 17 text

Ξχϝʔγϣϯ׬ྃޙ • HCPagingViewControllerDataSource ͔ΒindexPathʹ֘౰͢Δ HCContentViewControllerΛऔಘ ͠ɺͦͷviewΛlowerʹ addSubview

Slide 18

Slide 18 text

HoverConversion • ϢʔβʔͷTweetҰཡ͔ΒϢʔβʔϦ ετ΁ભҠ • ໭Δࡍ͸ViewControllerʹඥ෇͍ͨ Cell͕ϋΠϥΠτ͞ΕΔ

Slide 19

Slide 19 text

ViewControllerͷߏ੒

Slide 20

Slide 20 text

HCRootViewController • Ϧετ͔ΒHCPagingViewController Λදࣔ͢ΔͨΊͷViewController • UITableView͕viewʹରͯ͠ addSubview͞Ε͍ͯΔ

Slide 21

Slide 21 text

BackϘλϯͰͷભҠ class HCRootAnimatedTransitioning: NSObject, UIViewControllerAnimatedTransitioning { @objc func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { //লུ var initialFrame: CGRect? if let rootVC = toVC as? HCRootViewController, let pagingVC = fromVC as? HCPagingViewController { let indexPath = pagingVC.currentIndexPath //֘౰ͷcell͕ը໘಺ʹଘࡏ͠ͳ͍৔߹͸ɺͦͷcell·ͰΞχϝʔγϣϯͳ͠ͰεΫϩʔϧʢলུʣ if let cell = rootVC.tableView?.cellForRow(at: indexPath) { //ը໘ʹରͯ͠ͷ֘౰ͷcellͷҐஔΛऔಘ if let superview = rootVC.view, let point = cell.superview?.convert(cell.frame.origin, to: superview) { initialFrame = CGRect(origin: point, size: cell.bounds.size) ɹɹɹɹɹ } ɹɹɹɹɹɹɹ} rootVC.tableView?.selectRow(at: indexPath, animated: false, scrollPosition: .none) //֘౰ͷcellΛબ୒ঢ়ଶʹ͢Δ } //লུ //HCPagingViewControllerͷview͕initialFrameʹͳΔΞχϝʔγϣϯΛ࣮ߦʢলུʣ } }

Slide 22

Slide 22 text

ΤοδεϫΠϓͰͷભҠ HCDefaultAnimatedTransitioning: NSObject, UIViewControllerAnimatedTransitioning { @objc func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { //লུ if let pagingVC = fromVC as? HCPagingViewController, let rootVC = toVC as? HCRootViewController { let indexPath = pagingVC.currentIndexPath //֘౰ͷcell͕ը໘಺ʹଘࡏ͠ͳ͍৔߹͸ɺͦͷcell·ͰΞχϝʔγϣϯͳ͠ͰεΫϩʔϧ if rootVC.tableView?.cellForRow(at: indexPath) == nil { rootVC.tableView?.scrollToRowAtIndexPath( indexPath, atScrollPosition: pagingVC.scrollDirection, animated: false) } //֘౰ͷcellΛબ୒ঢ়ଶʹ͢Δ rootVC.tableView?.selectRow(at: indexPath, animated: false, scrollPosition: .none) } //লུ //ΤοδεϫΠϓͰભҠ͢ΔΞχϝʔγϣϯΛ࣮ߦʢলུʣ } }

Slide 23

Slide 23 text

Qiita http://qiita.com/marty-suzuki/items/ f6630543142c34d442ed

Slide 24

Slide 24 text

༨ஊͰ͕͢...

Slide 25

Slide 25 text

MisterFusion3 3 MisterFusion is Swift DSL for AutoLayout. It is the extremely clear, but concise syntax. https://github.com/marty-suzuki/MisterFusion

Slide 26

Slide 26 text

MartyJunior4 4 You can change tab contents with swipe gesture on middle of UITableView. https://github.com/marty-suzuki/MartyJunior

Slide 27

Slide 27 text

HoverConversion5 5 HoverConversion realized vertical paging with UITableView. https://github.com/marty-suzuki/HoverConversion

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

࡞Ζ͏ͱͯ͠·ͨ͠

Slide 30

Slide 30 text

iOS9 "Back to app button" Ú Back to The Future !

Slide 31

Slide 31 text

iOS10 "Back to app button" Ú The Future !

Slide 32

Slide 32 text

iOS10Ͱ Back to the futureʹ ͳΒͳ͘ͳͬͨͷͰஅ೦

Slide 33

Slide 33 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ marty-suzuki