gestures
play

Gestures Mobile Application Development in iOS School of EECS - PowerPoint PPT Presentation

Gestures Mobile Application Development in iOS School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in iOS 1 Outline Gestures Gesture recognizers Gesture states Custom gestures


  1. Gestures Mobile Application Development in iOS School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in iOS 1

  2. Outline • Gestures • Gesture recognizers • Gesture states • Custom gestures Mobile Application Development in iOS 2

  3. Add Gesture in Storyboard • Step 1: Drag gesture into view Mobile Application Development in iOS 3

  4. Add Gesture in Storyboard • Step 2: Connect gesture to @IBAction // In ViewController class... @IBAction func tapDetected (_ sender: UIGestureRecognizer) { let point = sender.location(in: self.view) let x = Int(point.x) let y = Int(point.y) print("tap detected at (\(x),\(y))") } Mobile Application Development in iOS 4

  5. Add Gesture Programmatically • View controller class conforms to UIGestureRecognizerDelegate • Implement method to handle gesture • Create gesture recognizer and add to view Mobile Application Development in iOS 5

  6. Add Gesture Programmatically class ViewController: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view let twoTouchTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTwoTouchTap)) twoTouchTapGestureRecognizer.delegate = self twoTouchTapGestureRecognizer.numberOfTouchesRequired = 2 self.view.addGestureRecognizer(twoTouchTapGestureRecognizer) } @objc func handleTwoTouchTap (_ sender: UITapGestureRecognizer) { let point = sender.location(in: self.view) let x = Int(point.x) let y = Int(point.y) print("two-touch tap detected at (\(x),\(y))") } } Mobile Application Development in iOS 6

  7. Other Gestures: Subclasses of UIGestureRecognizer UITapGestureRecognizer (multiple taps/touches) • UIPinchGestureRecognizer • UIRotationGestureRecognizer • Note: Only one UISwipeGestureRecognizer • gesture detected UIPanGestureRecognizer • per user interaction. UIScreenEdgeGestureRecognizer • UILongPressGestureRecognizer • class MyGesture: UIGestureRecognizer (custom) • Mobile Application Development in iOS 7

  8. Gesture States • UIGestureRecognizer.State – .possible (default) – .began (calls action) – .changed (calls action) – .ended (calls action, reset to .possible) – .cancelled (calls action, reset to .possible) – .failed (no call to action, reset to .possible) – .recognized (multi-touch, calls action, reset to .possible) developer.apple.com/documentation/uikit/uigesturerecognizer/state • Mobile Application Development in iOS 8

  9. Gesture States (e.g., Pan) let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan)) panGestureRecognizer.delegate = self self.view.addGestureRecognizer(panGestureRecognizer) @objc func handlePan (_ sender: UIPanGestureRecognizer) { let point = sender.location(in: self.view) let x = Int(point.x) let y = Int(point.y) if (sender.state == .began) { print("pan began at (\(x),\(y))") } if (sender.state == .changed) { print ("pan moved to (\(x),\(y))") } if (sender.state == .ended) { print ("pan ended at (\(x),\(y))") } } Mobile Application Development in iOS 9

  10. Custom Gestures Create subclass of UIGestureRecognizer • Import UIKit.UIGestureRecognizerSubclass • – Defines methods and properties to override Override main gesture functions • – touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) – touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) – touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) – touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) – reset() Mobile Application Development in iOS 10

  11. Custom Gesture Example: Backslash Mobile Application Development in iOS 11

  12. Backslash Custom Gesture (1) import UIKit import UIKit.UIGestureRecognizerSubclass class BackslashGestureRecognizer: UIGestureRecognizer { var initialPoint: CGPoint! var previousPoint: CGPoint! override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) { print("backslash: touchesBegan") let touch = touches.first if let point = touch?.location(in: self.view) { initialPoint = point previousPoint = point state = .began } } Mobile Application Development in iOS 12

  13. Backslash Custom Gesture (2) override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) { print("backslash: touchesMoved") let touch = touches.first if let point = touch?.location(in: self.view) { if ((point.x previousPoint.x) && (point.y previousPoint.y)) { previousPoint = point state = .changed } else { state = .failed } } } Mobile Application Development in iOS 13

  14. Backslash Custom Gesture (3) override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) { print("backslash: touchesEnded") let touch = touches.first if let point = touch?.location(in: self.view) { if (point != initialPoint) { state = .ended } else { state = .failed } } } Mobile Application Development in iOS 14

  15. Backslash Custom Gesture (4) override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) { print("backslash: touchesCancelled") state = .cancelled } override func reset() { print("backslash: reset") } } Mobile Application Development in iOS 15

  16. Backslash Custom Gesture (5) // In viewDidLoad... let backslashGestureRecognizer = BackslashGestureRecognizer(target: self, action: #selector(handleBackslash)) backslashGestureRecognizer.delegate = self self.view.addGestureRecognizer(backslashGestureRecognizer) // In ViewController... @objc func handleBackslash(_ sender: BackslashGestureRecognizer) { if sender.state == .ended { print("backslash detected") } } Remember to conform ViewController to UIGestureRecognizerDelegate Mobile Application Development in iOS 16

  17. Drawing Boxes var boxViews: [UIView] = [] func drawBox(_ point: CGPoint) { let boxRect = CGRect(x: point.x, y: point.y, width: 5.0, height: 5.0) let boxView = UIView(frame: boxRect) boxView.backgroundColor = UIColor.red self.view?.addSubview(boxView) boxViews.append(boxView) } func clearBoxes() { for boxView in boxViews { boxView.removeFromSuperview() } boxViews.removeAll() } Mobile Application Development in iOS 17

  18. Multiple Gestures • Simultaneous gestures – func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool • Gesture preference – func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool Mobile Application Development in iOS 18

  19. Multiple Gestures func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer is BackslashGestureRecognizer { if otherGestureRecognizer is UITapGestureRecognizer { return true } } return false } func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer is BackslashGestureRecognizer { if otherGestureRecognizer is UITapGestureRecognizer { return true } } return false } Mobile Application Development in iOS 19

  20. Multiple Gestures • Preserving interactions with view elements – E.g., button taps will go to gesture, not UIButton – Use gestureRecognizer: shouldReceive // In ViewController func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { if touch.view is UIButton { return false } // Add more checks for other types of view elements, as needed return true } Mobile Application Development in iOS 20

  21. Resources • Human Interface Guidelines: Gestures – developer.apple.com/design/human-interface- guidelines/ios/user-interaction/gestures • UIGestureRecognizer API Reference – developer.apple.com/documentation/uikit/uigesturerecognizer • Implementing a custom gesture recognizer – developer.apple.com/documentation/uikit/touches_presses_an d_gestures/implementing_a_custom_gesture_recognizer Mobile Application Development in iOS 21

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend