Praktikum ios-entwicklung. Sommersemester 2017 Prof. Dr. Linnhoff-Popien Lenz Belzner, Kyrill Schmid

Ähnliche Dokumente
Praktikum ios-entwicklung im Sommersemester 2015 Übungsblatt 4

Praktikum ios-entwicklung im Sommersemester 2015 Übungsblatt 3

Objective-C CheatSheet

3.9 Grundelemente einer Benutzeroberfläche

Leseprobe. Jan Tittel, Jochen Baumann. Apps für ios entwickeln. Am Beispiel einer realen App. ISBN (Buch):

SENSOREN MOBILER DEVICES

Programmierung für mobile Endgeräte

Grundlagen von Python

Gestaltung von App-Oberflächen (UI) mit Core Animation

Architekturbeschreibung Koala Editor

5.3 Verwendung der integrierten Datenbank SQLite

Abschnitt 9: Schnittstellen: Interfaces

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Objektorientierte Programmierung

von Anja Austermann Drag and Drop

Android Processes & Services

UIKit (Cocoa Touch) Framework für ios Apps. Objective C. Model View Controller Pattern

Software Engineering II

iphone OS Applikationsentwicklung auf mobilen Endgeräten

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Web-Anwendungsentwicklung mit dem Delivery Server

Software-Entwicklung für Android und ios

Vererbung & Schnittstellen in C#

Rich Internet Applications, Flex & Mate. (Ja, das ist Grafische Benutzeroberflächen!) Jakob Külzer jakob.kuelzer@gmail.

3 Objektorientierte Konzepte in Java

Klassenbeziehungen & Vererbung

Programmierung für mobile Endgeräte

3 Objektorientierte Konzepte in Java

Java - Webapplikationen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Design Patterns 2. Model-View-Controller in der Praxis

Auszug aus JAX-WS Folien

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Einstieg in die Informatik mit Java

1 Einführung... 1 Swift... 1 Objective-C ohne C?... 3 Vorteile von Swift... 3 Die Plattform kennenlernen... 5

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Prinzipien Objektorientierter Programmierung

5.5.8 Öffentliche und private Eigenschaften

Objektbasierte Entwicklung

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Besonderheiten von C#

versus Christian Grobmeier

Holger Hinzberg. iphone Apps programmieren. Praxiseinstieg. mitp

Glossar. Launching auf.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Beispiel droidremoteppt

Bean-Mapping mit MapStruct

Codegeneratoren mit Xtend , A. Arnold

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester / 32

ANDROID. Analyse der Android Plattform. Andre Rein, Johannes Florian Tietje. 28. Oktober FH-Gieÿen-Friedberg Android Praktikum

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Java Schulung (Java 2 Java Development Kit 5 / 6)

AK Medientechnologien 05 Delegation

Das Model View Controller (MVC) Konzept

Einfache Rechenstrukturen und Kontrollfluss II

Kapitel 6. Vererbung

Programmieren in Java

Schritt 4: Hallo Enterprise Bean

Vorkurs C++ Programmierung

Klassen in Java. Klassen

10 Objektorientierte Programmierung, Teil 1

Java RMI Remote Method Invocation

Kapitel 6. Vererbung

Smart Music Control Application

Enterprise Java Beans Einführung

Java Einführung Methoden in Klassen

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Softwaretechnik. Prof. Tomas Bures, PhD., Dipl. Inf. Lenz Belzner, Dipl. Inf. Christian Kroiß

Programmieren 2 07 JavaFX-Properties und Data-Binding

Mac OS X Programmierung

Smartphone Entwicklung mit Android und Java

Chair of Software Engineering. Bezieher SUBSCRIBERS Ereignis Erzeuger (zb GUI) Chair of Software Engineering. Save_file ROUTINE

Rapid I/O Toolkit. Alexander Bernauer

Java Kurs für Anfänger Einheit 5 Methoden

Kapitel 6. Vererbung

Objektorientierte Programmierung. Kapitel 12: Interfaces

GeForMTjs. GeForMT-Syntax. Testumgebung. Demonstration. Werkstatt Multitouch-Gestenerkennung im Web

AJAX DRUPAL 7 AJAX FRAMEWORK. Was ist das Ajax Framework? Ein typischer Ablauf eines Ajax Requests Die Bestandteile des Ajax Frameworks.

2. Hintergrundverarbeitung in Android: Services und Notifications

Praktikum Betriebssysteme 1. Aufgabe (1)

Übungen zur Android Entwicklung

C# - PROGRAMME MIT PLUGINS ERWEITERN

5.4 Klassen und Objekte

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

6. Modellierung von Informationssystemen. 6.1 Einleitung 6.2 Konzeptuelles Modell 6.3 OASIS Spezifikation 6.4 Execution Model 6.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Javakurs 2013 Objektorientierung

Kollaborative Gesten für Tabletop- User-Interfaces

Kapitel 12: Übersetzung objektorienter Konzepte

Moderne Web- Anwendungen mit

Seminararbeit: iphone Entwicklung von 0 auf 100. Von Philipp Koulen

Ein einfacher Server. .NET Remoting. Klassentypen

Javakurs für Anfänger

Vgl. Oestereich Kap 2.7 Seiten

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

Java für Computerlinguisten

5.6 Vererbung. Vererbung

Java Beans.

Programmieren 2 Selbststudium Semesterwoche 6

Transkript:

Praktikum ios-entwicklung Sommersemester 2017 Prof. Dr. Linnhoff-Popien Lenz Belzner, Kyrill Schmid

EVENT HANDLING INTERAKTIONEN MIT DEM DISPLAY 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 2

Quelle: http://www.apple.com/ Der Nutzer kann durch Interaktion mit seinem Gerät verschiedene Events in ios auslösen Es gibt (Multi-)Touch-Events Motion-Events Überblick Remote-Control-Events (zur Bedienung von Multimedia-Komponenten) 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 3

Überblick Events sind Objekte, die an eine Anwendung gesendet werden, um sie über Interaktionen eines Nutzers zu informieren Events, die durch den Nutzer ausgelöst werden, sind Instanzen der Klasse UIEvent enthalten Informationen, um auf das Event entsprechend zu reagieren haben einen Typ, z.b. touch shaking motion remote control und einen Subtyp, z.b. für remote control play pause stop... 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 4

TOUCH-GESTEN 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 5

Touch-Gesten: Überblick Behandlung einzelner Berührungen der Finger mit dem Display (Touch-Events) ist in vielen Fällen viel zu aufwendig Viele Interaktionen erfolgen nach dem gleichen Schema (Gesten) Tippen (Tap) Wischen (Swipe) Klammern (Pinch) Lange Drücken (LongPress)... Verwendung einer "High-Level-API" zur Behandlung von Gesten 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 6

Touch-Gesten: Überblick Geste = Kombinationen/Abfolgen von Touch-Events Intuitive Gesten werden von ios über "Gesture Recognition" direkt erkannt Tippen (UITapGestureRecognizer) Pinchen (UIPinchGestureRecognizer) Wischen (UISwipeGestureRecognizer) Ziehen/Verschieben (UIPanGestureRecognizer)... Für viele Gesten gibt es in Kombination mit typischen UI-Elementen eine direkte Integration in UIKit: Beispiel: UIScrollView Pinch-Geste Zoom Wisch-Geste Scroll 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 7

Touch-Gesten: Erkennen und behandeln Gesture Recognizer (UIGestureRecognizer) Dienen der Abstraktion von der komplexen Event-Handling-Logik Stellen den bevorzugten Weg zur Behandlung von Touch-Events dar Implementieren eigener Action-Target-Mechanismen: Instanziieren und Konfigurieren eines Gesture Recognizers Hinzufügen des Gesture Recognizer zur eigenen View Gesamte View reagiert auf die hinzugefügte Geste Vorgehensweise: Verwendung und Anpassung von Built-In Gesture Recognizern, oder Implementierung eigener (Custom) Gesture Recognizer 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 8

Behandeln von Events mit Gesture Recognizern Hinzufügen eines Built-In Gesture Recognizers Erzeugen und konfigurieren einer Instanz von UIGestureRecognizer Zuweisen eines Targets und einer Action Zuweisen gestenspezifischer Attribute (optional; z.b. numberoftapsrequired) Registrieren des Gesture Recognizers mit einer View Implementieren der Action-Methode Quelle: http://www.apple.com/ 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 9

kontinuierlich diskret Unterscheidung von Gesten Es existieren diskrete und kontinuierliche Gesten Tritt genau einmal auf Erfolgt über einen längeren Zeitraum Quelle: http://www.apple.com/ 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 10

Beispiel: ImageTranslationRecognition (Storyboard) Pan 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 11

Vorgehensweise Erzeugen eines neuen Projekts "ImageTranslationRecognition" (Template: Single View Application) Im Storyboard: Hinzufügen einer Image View vom Typ UIImageView Im Project Navigator: Hinzufügen eines Image (Drag & Drop vom Finder) Unter Editor : Beispiel: ImageTranslationRecognition Size to fit content: Anpassen der Größe der Image View an das Image 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 12

Von der Objekt Library: Beispiel: ImageTranslationRecognition Hinzufügen eines Pan Gesture Recognizers vom Typ UIPanGestureRecognizer zur Image View (Drag & Drop auf die View) 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 13

Beispiel: ImageTranslationRecognition Pan Gesture Recognizer ist jetzt als Outlet bei der Image View registriert 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 14

Beispiel: ImageTranslationRecognition Erzeugen und Verbinden einer Action-Methode (Controller ist Target) 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 15

Beispiel: ImageTranslationRecognition Implementierung der Action-Methode // ViewController.swift import UIKit class ViewController: UIViewController { @IBAction func handlepan(sender: UIPanGestureRecognizer) { // Die Translation liefert hier den absoluten Abstand // zu dem Punkt, an dem der Finger auf den Bildschirm traf // bezogen auf das Koordinatensystem der übergebenen View let translation:cgpoint = sender.translationinview(self.view) // Anpassen der Position des Images sender.view!.center = CGPoint(x:sender.view!.center.x + translation.x, y:sender.view!.center.y + translation.y) } } // Zurücksetzen der Translation, um nur relative Positionsveränderungen // zur Position im vorhergehenden Aufruf der Action-Methode zu erhalten sender.settranslation(cgpoint.zero, inview: self.view) 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 16

Beispiel: ImageTranslationRecognition Im Attributes Inspector: Erlauben von Nutzerinteraktionen mit der Image View 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 17

Allgemeine Anmerkungen Beispiel: ImageTranslationRecognition Diskrete Gesten rufen Action Methode einmal auf Kontinuierliche Geste kann Action Methode mehrfach aufrufen Das Referenzieren eines Gesture Recognizer außerhalb der Action-Methode ist über eine Outlet-Connection möglich Anmerkungen zum UIPinchGestureRecognizer Wenn man den Skalierungsfaktor nicht selbst verändert, wird er absolut berechnet s d Start d Now Skalierungsfaktor Abstand der Finger bei erster Berührung Gegenwärtiger Abstand der Finger s = d Now / d Start 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 18

Initialisierung mit initwithtarget:action: target: Target-Objekt, das in einer Action-Methode auf eine Geste reagiert I.d.R. der zugehörige View Controller action: Ein Selektor Programmatisches Erzeugen eines UIGestureRecognizers Spezifiziert die Action-Methode, die beim Auftreten der Geste ausgeführt werden soll Registrieren des Gesture Recognizers mit addgesturerecognizer: des entsprechenden UIView-Objekts Programmatische Erzeugung erfolgt i.d.r. in viewdidload 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 19

Beispiel: TapRecognition (programmatisch) Tippen auf den Bildschirm bewirkt das Verschieben eines Images an die angetippte Stelle 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 26

Beispiel: TapRecognition Vorgehensweise Analog zum Beispiel ImageTranslationRecognition Erzeugen einer Outlet-Connection zur Image View 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 27

Beispiel: TapRecognition Programmatisches Hinzufügen eines UITapGestureRecognizers (geht natürlich auch über Interface-Builder...) // ViewController.swift import UIKit class ViewController: UIViewController { @IBOutlet weak var imageview: UIImageView! override func viewdidload() { // Initialisieren eines UITapGestureRecognizers let tgr = UITapGestureRecognizer(target: self, action:#selector(handletap)) } } // Registrieren mit der eigenen View self.view.addgesturerecognizer(tgr) 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 28

Beispiel: TapRecognition Implementierung der Action-Methode Achtung: Nur zwei Signaturen erlaubt: func handletap() -> Void func handletap(tgr:uitapgesturerecognizer) -> Void func handletap(tgr:uitapgesturerecognizer) -> Void { // Position wo das Event auftrat let location = tgr.locationinview(self.view) } // Verschieben des Images an die neue Position self.imageview.center = location; 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 29

Behandlung von Touch-Gesten im Gesture Recognizer Eine Instanz von UIGestureRecognizer gehört zu genau einer UIView-Instanz Hinzufügen desselben Gesture Recognizers zu verschiedenen UIView- Instanzen nicht möglich! Ein wiederholtes Hinzufügen überschreibt das vorhergehende! Beispiel: Nur view2 erhält die Nachricht taptaptap // MyController.m [...] UITapGestureRecognizer *tapgesture = [[UITapGestureRecognizer alloc] initwithtarget:self action:@selector(taptaptap:)]; [self.view1 addgesturerecognizer:tapgesture]; [self.view2 addgesturerecognizer:tapgesture]; [...] 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 30

UIGestureRecognizer unterbricht standardmäßig Behandlung von Touch- Events, wenn eine Geste erkannt wurde Problem: Behandlung von Touch-Gesten im Gesture Recognizer UIView mit einer Gestenerkennung erhält möglicherweise nicht alle Touch- Events. 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 31

Gesture Recognizer: Zustandsmodell Gesture Recognizer operieren in einer Zustandsmaschine mehr dazu im "Event Handling Guide for ios" hier wird jedes mal die Action- Methode aufgerufen Achtung: Recognized == Ended Quelle: http://www.apple.com/ 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 32

Gesture Recognizer: Zustandsmodell Testen des gegenwärtigen Zustands über die Konstanten UIGestureRecognizerStatePossible (Default State) Es wurden eventuell Touch-Events registriert, aber noch keine Geste erkannt UIGestureRecognizerStateBegan Es wurde ein Touch-Event empfangen und eine kontinuierliche Geste erkannt Löst eine Action-Nachricht aus UIGestureRecognizerStateChanged Es wurden Touch-Events erkannt, die eine Veränderung in der kontinuierlichen Geste signalisieren Löst eine Action-Nachricht aus UIGestureRecognizerStateEnded Es wurden Touch-Events erkannt, die das Ende einer (kontinuierlichen) Geste signalisieren Löst eine Action-Nachricht aus Reset auf UIGestureRecognizerStatePossible 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 33

Gesture Recognizer: Zustandsmodell Testen des gegenwärtigen Zustands über die Konstanten UIGestureRecognizerStateFailed Es wurde eine Sequenz von Touch-Events empfangen, die aber nicht als Teil der gegenwärtigen Geste erkannt werden konnten Keine Action-Nachricht Reset auf UIGestureRecognizerStatePossible UIGestureRecognizerStateRecognized Es wurden eine Sequenz von Touch-Events als Geste erkannt Löst eine Action-Nachricht aus Reset auf UIGestureRecognizerStatePossible Hinweise: Die Konstanten sind als enum realisiert. In Swift erfolgt der Zugriff jedoch über die Member Values (z.b. UIGestureRecognizerState.Began) In Swift existiert keine Konstante.Recognized 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 34

Beispiel: Drag & Drop: Gesture Recognizer: Erkennen paralleler Gesten Realisierung normalerweise mit LongPress und Pan auf ein UI-Objekt. LongPress zum Starten des Drag-Vorgangs, Pan zum Bewegen Die gesamte Pan-Geste liegt vollständig innerhalb der LongPress-Geste! Problem: Standardmäßig wird das parallele Erkennen mehrerer Gesten unterdrückt Hier muss aber Pan während eines LongPress erkannt werden LongPress gibt Touch-Events nicht weiter Pan kann nicht erkannt werden! Lösung: Implementierung des UIGestureRecognizerDelegate Protokolls 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 35

Protokoll: Was ist das? Die Klasse eines Objekts unterscheidet sich häufig von dessen Rolle in einem System. Beispiel Die Klasse eines Objekts ist NSMutableArray aber seine Rolle in der Anwendung ist eine Warteschleife (für Druckaufträge). Spezifikation von Rollen erfolgt in Objective-C / Swift über Protokolle (ähnlich zu Interfaces in Java). Protokolle stellen eine Alternative zur Vererbung dar können von beliebigen Klassen implementiert werden ermöglichen es Objekten schwach assoziierter Klassen miteinander zu kommunizieren 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 36

Protokoll: Definition in Objective C Protokolle spezifizieren die zu implementierenden Methoden Methoden können als verpflichtend oder optional spezifiziert werden Beispiel: UIGestureRecognizerDelegate-Protokoll // Dieses Protokoll ist konform zum NSObject Protokoll @protocol UIGestureRecognizerDelegate <NSObject> // die folgenden Methoden MÜSSEN implementiert werden @required [...] // die folgenden Methoden KÖNNEN implementiert werden @optional -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gr shouldrecognizesimultaneouslywithgesturerecognizer: (UIGestureRecognizer *)o; [...] @end 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 37

Protokoll: Definition in Swift Protokolle können ebenfalls als verpflichtend oder optional spezifiziert werden protocol SomeProtocol { } // die folgenden Methoden MÜSSEN implementiert werden func dosomecalculatiom(count: Int) -> Int // die folgenden Methoden KÖNNEN implementiert werden optional func dosomeotherstuff() -> Void In Swift existieren viele weitere Möglichkeiten zur Definition von Protokollen und zur Restriktion ihrer Anwendung Siehe: https://developer.apple.com/library/ios/documentation/swift/conceptual/swif t_programming_language/protocols.html 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 38

Problem: Gesture Recognizer: Erkennen paralleler Gesten Parallele Erkennung von LongPress und Pan Lösung: Implementierung des UIGestureRecognizerDelegate Protokolls 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 39

Beispiel: DragAndDrop Long Press Pan Drop 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 40

Vorgehensweise Beispiel: DragAndDrop Analog zum Beispiel "ImageTranslationRecognition" Kennzeichnung des View Controller als Delegate // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { [...] } 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 41

Beispiel: DragAndDrop Erzeugen notwendiger Outlets und Properties // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { @IBOutlet weak var imageview: UIImageView! var pangr:uipangesturerecognizer! var longpressgr:uilongpressgesturerecognizer! } [...] 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 42

Beispiel: DragAndDrop Initialisierung der Gesture Recognizer // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { [...] override func viewdidload() { // Initialisieren/Registrieren eines UILongPressGestureRecognizer self.longpressgr = UILongPressGestureRecognizer( target:self, action:"handlelongpress:") self.imageview.addgesturerecognizer(self.longpressgr) // Initialisieren/Registrieren eines UIPanGestureRecognizer self.pangr = UIPanGestureRecognizer(target: self, action: "handlepan:") self.imageview.addgesturerecognizer(self.pangr) } } // Setzen des UILongPressGestureRecognizer als Delegate self.longpressgr.delegate = self 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 43

Beispiel: DragAndDrop Gibt die Protokoll-Methode true zurück, können die beiden übergebenen UIGestureRecognizer parallel zueinander Gesten erkennen. // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { [...] } func gesturerecognizer( UIGestureRecognizer, shouldrecognizesimultaneouslywithgesturerecognizer: UIGestureRecognizer) -> Bool { // Erlaube parallele Verarbeitung von Pan während LongPress // Achtung: Dies erlaubt auch den LongPress während Pan! return true } 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 44

Beispiel: DragAndDrop Implementierung des LongPress-Handlers // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { [...] func handlelongpress(gesturerecognizer:uilongpressgesturerecognizer) { // Visualisiere, dass jetzt ein Drag & Drop passiert if gesturerecognizer.state == UIGestureRecognizerState.began gesturerecognizer.state == UIGestureRecognizerState.Changed { self.imageview.alpha = 0.5 } else { // Visualisiere, dass Drag & Drop zu Ende ist self.imageview.alpha = 1.0 } } } 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 45

Beispiel: DragAndDrop Implementierung des Pan-Handlers // ViewController.swift import UIKit class ViewController: UIViewController, UIGestureRecognizerDelegate { [...] } func handlepan(gesturerecognizer:uipangesturerecognizer) { // Führe Pan nur aus, wenn gerade ein LongPress aktiv ist if self.longpressgr.state == UIGestureRecognizerState.Began self.longpressgr.state == UIGestureRecognizerState.Changed { // Verschiebe Image an die Position, wo das Event auftrat self.imageview.center = gesturerecognizer.locationinview(self.view) } } 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 46

Beispiel: DragAndDrop Long Press Pan Drop 31.05.2017 Lenz Belzner, Kyrill Schmid - ios-praktikum - SoSe 17 47