How to implement "touch and peek" function in iOS9.
ZPVSOBNF"MMSJHIUTSFTFSWFE3FEJTUSJCVUJPOPSQVCMJDEJTQMBZOPUQFSNJUUFEXJUIPVUXSJUUFOQFSNJTTJPOGSPNZPVSOBNF*OUSPEVDFUPVDIBOEQFFL1SPHSBNNJOH ू·ΕSwift͖ʂSwiftѪձ vol11:VJDIJ:PTIJEB 3FTFBSDIFS %&/40*5-BCPSBUPSZ *OD(FUUJOHTUBSUFEXJUI%UPVDI
View Slide
4FMGJOUSPEVDUJPOsonson• sonson_twit@Twitter• sonsongithub@githubPortfolio• 2tch(̎ͪΌΜͶΔϒϥβ)ͳͲͳͲຊۀ• ΫϧϚۀք• ը૾ೝࣝͱ͔ɼUIͱ͔৭ʑ͓ͬͯΓ·͢ ιʔεΛެ։ͯ͠Δͷ͋Γ·͢IUUQHJUIVCDPNTPOTPOHJUIVC
SFEEJGU0QFOTPVSDFQSPKFDU1ԯਓҎ্ͷΞϝϦΧͷSNSAPI͋ΓObjective-CͷAPI Wrapper͋Γ• OAuth2ʹରԠͯ͠ͳ͍• Swift͡Όͳ͍Α͠ɼ͍ͬͪΐɼझຯʴษڧ͕ͯΒ࡞Δ͔ʂMIT License
4XJGUGSPNUP݁• beta1͔Βॱʹશ෦ରԠͨ͠ɾɾɾͳͷͰۤ࿑͕ബΕ͍ͯΔͱ͍͏͔ҧ͍͕Θ͔Βͳ͍ۤ࿑ͨ͠ͱ͜Ζ• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• ҙຯෆ໌ͳ༷มߋʢมͷܕͱ͔ʣ
5PVDIBOEQFFL*OUSPEVDF%UPVDI༻ҙ• registerForPreviewing(with:sourceView:)• unregisterForPreviewing(withContext:)σϦήʔτ - UIViewControllerPreviewingDelegate• previewingContext(_:viewControllerForLocation:)• previewingContext(_:commit:)
%UPVDI1. registerForPreviewingͰ४උ͢Δ2. Ϣʔβ͕ڧ͘ԡ͢3. previewingContext(_:viewControllerForLocation:)͕ݺΕΔ4. ԡ͞ΕͨྖҬΛઃఆ͢Δ5. ͜͜Ͱview controllerΛ࡞Γɼฦ͢6. ࠷ޙ·Ͱڧ͘ԡ͠ࠐΉ7. previewingContext(_:commit:)͕ݺΕΔ8. ͜͜Ͱ͖ͬ͞࡞ͬͨview controllerΛͲ͏͢Δ͔ܾΊΔ
QSFWJFXJOH$POUFYU @WJFX$POUSPMMFS'PS-PDBUJPO1SFQBSFBWJFXDPOUSPMMFSGPSQFFLJOHϝΠϯʹΔ͜ͱ• view controllerΛ࡞Δ• ԡ͞ΕͨॴͷใΛఆ͢Δ• ॴΛcontextʹೖྗ͢Δ• view controllerͷαΠζΛܾఆ͢Δ
QSFWJFXJOH$POUFYU @WJFX$POUSPMMFS'PS-PDBUJPO$SFBUFWJFXDPOUSPMMFSBOEGFUDIDPOUFOUTfunc previewingContext(_ previewingContext: UIViewControllerPreviewing,viewControllerForLocation location: CGPoint) -> UIViewController? {// Create new view controller for peekinglet controller = WebViewController(nibName: nil, bundle: nil)let locationInTextView = self.view.convert(location, to: textView)// get contentscontroller.url = getUrl(at: locationInTextView)return controller}
QSFWJFXJOH$POUFYU @DPNNJU)PXJTUIFWJFXDPOUSPMMFSTIPXOϝΠϯʹΔ͜ͱ• ࠓද͍ࣔͯ͠Δview controllerΛͲ͏͢Δ͔ܾΊΔUIViewControllerͷ͓࡞๏ͰΓ·͠ΐ͏• modalʁ• pushʁ• ಠࣗʁʢ͓͢͢Ί͠ͳ͍ʣ
QSFWJFXJOH$POUFYU @DPNNJU1VTI1SFTFOUWJFXDPOUSPMMFSfunc previewingContext(_ previewingContext: UIViewControllerPreviewing,commit viewControllerToCommit: UIViewController) {// Modallet nav = UINavigationController(rootViewController: viewControllerToCommit)self.present(nav, animated: true, completion: nil)// PushnavigationController?.pushViewController(viewControllerToCommit, animated: false)}
.FOV
)PXUPQSFQBSFNFOVJUFNToverride var previewActionItems : [UIPreviewActionItem] {get {let action1 = UIPreviewAction(title: “action1”, style: .default){ previewAction, viewController in print(title) }let action2 = UIPreviewAction(title: “delete”, style: .destructive){ previewAction, viewController in print(title) }return [action1, action2]}}
ۤ࿑͢Δͱ͜Ζʁॴͷ͋Δίϯςϯπͷऔಘ• CGRect• func contains(_ point: CGPoint) -> Bool͋ΔViewͷCGRectCGPointΛଞͷView͔Βݟͨͱ͖ɾɾɾɾ• UICoordinateSpaceϓτϩίϧΛ͏• func convert(CGPoint, to: UICoordinateSpace)• func convert(CGPoint, from: UICoordinateSpace)• func convert(CGRect, to: UICoordinateSpace)• func convert(CGRect, from: UICoordinateSpace)
αϯϓϧιʔείʔυ• https://github.com/sonsongithub/UZTextView/tree/develop• Sample3DTouch projectWWDC2016• https://developer.apple.com/videos/play/wwdc2016/228/
·ͱΊSwift3• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε• SwiftͰ࡞ΒΕͨ֎෦ϥΠϒϥϦͷϝϯςφϯε3D touch - Touch & Peek• ׂͱ؆୯• ରԠ͢ΔσϦήʔτ؆୯• λονͨ͠ॴʹରԠ͢ΔใΛఆ͢Δͷ͕େม