let’s dev GmbH & Co. KG - Die Marke für wegweisende Individualsoftware

Blog

Top!

let’s dev | Scroll to top
let’s dev | Scroll to next content item

Hello

let’s dev | Scroll to previous content item
let’s dev Blog | SwiftUI - Einfache und schnelle Umsetzung von User Interfaces
by Tobias
02. März 2020

SwiftUI - Einfache und schnelle Umsetzung von User Interfaces

Während der WWDC 2019 wurde SwiftUI vorgestellt, eine völlig neue Möglichkeit der UI-Entwicklung. Ziel dieser neuen Methode soll in erster Linie die einfache und schnelle Umsetzung von User Interfaces sein, die in so gut wie jeder App gebraucht werden. Dazu gehören unter anderem Listen oder strukturierte Anordnungen von standardmäßigen iOS-Elementen wie z.B. Texte, Buttons oder Picker.

Der Entwickler soll möglichst wenig Zeit dafür aufwenden, Komponenten dieser Art zu entwickeln und in der Lage sein, wesentlich schneller zu einem guten Ergebnis zu gelangen. Durch die erhebliche Reduzierung an Code-Zeilen und besserer Lesbarkeit lassen sich die Komponenten wesentlich schneller und einfacher anpassen. Außerdem unterstützt SwiftUI ohne zusätzlichen Aufwand unterschiedliche Gerätetypen, Drag & Drop oder den Dark Mode.

Projektaufbau mit SwiftUI

Beim Anlegen eines neuen Projekts in Xcode muss von vornherein die Swift-UI-Funktionalität aktiviert werden. Xcode generiert dann automatisch nicht nur die AppDelegate, sondern auch eine SceneDelegate Klasse. Außerdem werden notwendige Properties direkt in der Info.plist angelegt.

Das SceneDelegate stellt Funktionen bereit, um die Ansicht bei App-Start und auch anderen Ereignissen festzulegen. Dabei wird ein UIScene Objekt übergeben, für das eine Ansicht definiert und gesetzt wird. Im Gegensatz zur Verwendung von xib-Files oder Storyboards muss das Window mit Hilfe der übergebenen Scene selbst erzeugt werden. Wie gewohnt erhält das Window einen rootViewController. Bei der Verwendung von Swift UI muss ein UIHostingController anstatt eines normalen ViewControllers verwendet werden. Der Inhalt dieses Controllers entspricht einer View, deren Inhalt angezeigt werden soll. Zum Schluss wird das neu erstellte Window auf dem Screen angezeigt.

SwiftUI stellt eine Interface View bereit, von der alle Klassen, die Inhalt auf dem Screen anzeigen sollen, abgeleitet werden müssen. Jede dieser View-Klassen enthält eine Instanzvariable body. Diese wird vom Entwickler definiert, indem eine neue View mit beliebigem Inhalt erstellt wird. Alle Elemente in dieser View werden dann später angezeigt. Jede dieser Views kann darüber hinaus weitere von View abgeleitete Elemente enthalten. Dadurch lassen sich komplexe Oberflächen einfach strukturieren, während die Komponenten separat aufgebaut sind und der Code um einiges übersichtlicher wird.

Erste Schritte

Im SceneDelegate wird festgelegt, welcher Inhalt angezeigt wird. Xcode generiert zu Beginn eine Klasse ContentView, die einen Beispieltext enthält. Eine Instanz dieser Klasse wird zur Laufzeit erzeugt und angezeigt. Wird der Code der ContentView verändert, erscheint somit der angepasste Inhalt nach einem Start der App. Außerdem zeigt Xcode auf der rechten Seite neben dem Quellcode eine Vorschau, wodurch der Entwickler in Echtzeit sehen kann, wie das User Interface später in der App aussehen wird.

In einem ersten Versuch fügen wir einige Zeilen zur Definition der body Instanzvariable hinzu.

SwiftUI first elements

Wir beginnen mit einem VStack, einer Vertical StackView in SwiftUI. Um dem body mehrere Elemente hinzufügen zu können, ist das notwendig, da dieser aus nur einem View Element bestehen darf. Außerdem fügen wir in diesem VStack einen Text und ein Image hinzu. In Echtzeit können wir sehen, wie die Ansicht aussehen wird.

Da der Text noch zu klein ist, wollen wir die Font anpassen. Attribute jedes UI-Elements lassen sich einfach an die jeweilige Initialisierung anhängen und werden Modifier genannt. Außerdem ändern wir in diesem Zuge auch gleich die Farbe des Texts. Das sieht dann folgendermaßen aus:

SwiftUI first elements attributed

Nach der Anpassung des Textes wirkt das Image noch zu klein. Wir könnten die gleichen Modifier auch diesem Element hinzufügen. SwiftUI ermöglicht allerdings auch, Modifier zu allen Elementen innerhalb einer Struktur hinzuzufügen. Somit können wir die Modifier verschieben und stattdessen auf den VStack setzen.

SwiftUI first elements stack attributed

Nach der letzten Änderung erhalten alle Elemente innerhalb des Stacks die definierten Modifier. Jetzt wollen wir den Text mit einem Background hinterlegen. Dafür definieren wir einen background, passen den cornerRadius an und fügen padding hinzu. In der Vorschau kann man sofort erkennen, dass das angezeigte Ergebnis nicht dem entspricht, was man erwarten würde.

SwiftUI first elements wrong cascade

Der Grund dafür ist die Reihenfolge der Modifier. Wir passen zuerst den cornerRadius an, der ohne einen speziellen Hintergrund aber nicht sichtbar ist. Den background kann man sehen, allerdings wird dieser erst nach dem cornerRadius definiert und erscheint deshalb ohne abgerundete Ecken. Der Padding wird als letztes hinzugefügt, wodurch lediglich ein Abstand zwischen dem Text und dem Bild entsteht und nicht der eigentliche Hintergrund größer wird. Nach einer Korrektur der Reihenfolge sieht das Ergebnis folgendermaßen aus:

SwiftUI first elements correct cascade

Um die Elemente innerhalb des VStack Objekts nicht zentriert, sondern beispielsweise ganz oben oder ganz unten anzuzeigen, muss lediglich ein Spacer() Element an der entsprechenden Stelle hinzugefügt werden. Dieses Element nimmt den übrigen Platz ein, den die anderen Elemente nicht benötigen.

Library

Zur Vereinfachung des ganzen Prozesses stellt Xcode eine Library zur Verfügung, in der alle Views und Modifier zusammengefasst sind. So lassen sich ganz einfach neue Elemente und Modifikationen per Drag & Drop hinzufügen.

SwiftUI library SwiftUI library modifiers

Preview

Innerhalb jedes View Objekts oder auch ViewController Klasse lassen sich Previews anlegen, die bestimmen, welche und wie viele Previews angezeigt werden. So lässt sich beispielsweise eine Vorschau auf verschiedene Geräte oder den Dark Mode erstellen. Preview bietet sehr viele und komplexe Anwendungsmöglichkeiten. In diesem Beitrag wird nur kurz auf die Preview eingegangen, um die Vorteile für die Entwicklung mit SwiftUI aufzuzeigen.

SwiftUI preview code SwiftUI preview visuals

Im oberen Beispiel werden zwei Previews angezeigt. Die Erste ist ein PreviewLayout, für das eine feste Größe definiert wird. Die zweite Ansicht ist ein spezifisches Gerät, das im Dark Mode angezeigt wird. Mehrere Previews müssen in einer Group zusammengefasst werden, denn auch hier besteht der Wert Previews lediglich aus einer View.

Die Preview Funktion ist sehr hilfreich und verhindert, dass die App immer wieder gestartet werden muss, um das Ergebnis sehen zu können. Das ist besonders vorteilhaft für Ansichten, die in einer App nur durch viele Klicks erreicht werden können. Außerdem bietet jede Preview einen kleinen Button, der eine Live Preview aktiviert. Mit Hilfe dieser Funktion kann eine Ansicht interaktiv benutzt werden, ohne die App auf einem Gerät starten zu müssen.

Beispiel einer Liste mit Custom View Elementen

Im folgenden Beispiel wollen wir eine Liste von Elementen anzeigen. Dazu legen wir zuerst eine Zelle an, die den Inhalt sämtlicher Listenelemente bestimmt. Anschließend können wir diese Zelle in unserer ContentView verwenden. Außerdem legen wir eine Container-Klasse an, die uns die notwendigen Daten liefern soll. Wir beginnen mit dem Container Developer.

SwiftUI developer container

In dieser einfachen Klasse definieren wir ein paar Werte, die wir später befüllen und in den Views verwenden können. Damit der Container für eine Liste in SwiftUI verwendet werden kann, muss es das Interface Identifiable implementieren. Somit stellen wir sicher, dass jede Instanz dieser Klasse später eindeutig identifiziert werden kann. Dafür fügen wir außerdem einen UUID-Wert hinzu, der diese Eindeutigkeit gewährleistet. Falls wir uns im DEBUG-Modus befinden, legen wir Testdaten an, um diese direkt in der Vorschau nutzen zu können.

Die erste View, die wir brauchen, ist eine DeveloperCell. Diese soll die Werte einer einzelnen Developer Instanz darstellen.

SwiftUI developer cell

Die Zelle hat eine Instanz der Developer Klasse, deren Werte sie anzeigt. Die Basis unserer View stellt ein HStack dar, in dem Elemente horizontal angeordnet werden. Mit einem Symbol und einem Text stellen wir ein Bild und den Namen des jeweiligen Entwicklers dar. Ist der Entwickler nicht verfügbar, färben wir außerdem den Text sowie das Symbol grau.

Eine Bewertung stellen wir dar, indem wir das Bild eines Sterns mehrfach anzeigen, abhängig von dem Integer-Wert rating. Dazu erstellen wir mit einem ForEach-Block ein Image mit einem Stern. Die Farbe des Sterns ist abhängig von der Verfügbarkeit gelb oder grau. Die brightness variieren wir abhängig von der Höhe der Bewertung. Zur kompletten Zelle fügen wir ein kleines Padding hinzu. Für die Vorschau unserer Zelle definieren wir eine neue Instanz Developer, die wir mit Beispieldaten füllen.

Die ContentView gestalten wir so, dass diese eine Liste von Developer Instanzen erhält und deren Inhalt mit Hilfe der erstellten Zelle anzeigt.

SwiftUI developer content view

Wir verwenden List(developers), um für jede Instanz eine unserer Zellen anlegen zu können. Da wir eventuell in einem weiteren Entwicklungsschritt die Daten der einzelnen Entwickler über die App anpassen möchten, legen wir als oberstes Element eine NavigationView an, die eine NavigationBar zur Verfügung stellt und es uns ermöglicht, von dieser Ansicht auf eine darunterliegende Ansicht zu wechseln.

Die Liste erhält einen zusätzlichen Modifier navigationBarTitle, mit dem wir den Titel der Ansicht festlegen. Jede DeveloperCell Instanz packen wir außerdem in einen NavigationLink. Dieses Element nimmt eine destination entgegen. Diese destination muss eine View sein, zu der nach einer Interaktion des Benutzers navigiert werden soll. Vorerst definieren wir einfach einen Text, der den Namen des jeweiligen Entwicklers anzeigt.

Wenn wir die App jetzt starten, sehen wir unsere Liste mit den entsprechenden Details der Entwickler. Sobald wir eine Zelle auswählen, erscheint eine weitere Ansicht, auf der lediglich der Name des ausgewählten Entwicklers zu sehen ist. Über den Button oben links gelangen wir auf die Übersicht zurück.

SwiftUI developer detail view

Ein großer Vorteil von SwiftUI ist das Handling der Daten. Sobald sich Werte einer Developer Instanz ändern, wird die Ansicht aktualisiert. Darüber hinaus registriert SwiftUI, wenn Elemente hinzugefügt oder gelöscht werden und aktualisiert die Views automatisch.

@State, @Binding und @Environment

Wenn eine View einen bestimmten Zustand definiert und kontrolliert, wird die angelegte Variable mit dem Tag @State versehen. Ohne diesen Tag kann eine View den Wert einer Variablen nur lesen und nicht verändern.

SwiftUI state code SwiftUI state off SwiftUI state on

Das Toggle, das wir definieren, verändert unsere Variable showMessage. Die Variable versehen wir mit einem zusätzlichen $ Symbol, um ein Binding zu signalisieren (dazu gleich mehr). Je nach Zustand dieses Werts zeigen wir einen Text an oder verstecken diesen.

Wollen wir nun eine weitere View aufrufen und dieser einen Zugriff auf showMessage ermöglichen, können wir das mit dem @Binding Tag erreichen. Wenn wir also zum Beispiel eine weitere View anlegen, die lediglich das Toggle beinhaltet, aber trotzdem den Status der showMessage Variable verändern können soll, ohne diese zu besitzen, wäre das ein solcher Fall. Im folgenden Beispiel definieren wir ToggleView, die das Binding auf showMessage enthält und verwenden diese View anschließend in der zuvor angelegten MessageView.

SwiftUI binding toggle SwiftUI binding code

Wie auch schon für den Toggle übergeben wir showMessage mit einem zusätzlichen $ Symbol, das wir für ein Binding benötigen. Das Element Toggle verwendet intern ebenfalls ein Binding auf die Variable, die übergeben wird. Wenn wir die App nun starten, können wir mit Hilfe des Toggles die angezeigte Nachricht erscheinen und auch wieder verschwinden lassen.

Wollen wir innerhalb einer View auf eine Umgebungsvariable zugreifen, setzen wir das mit Hilfe des @Environment Tags um. Damit erhalten wir Zugriff auf die Statusvariablen einer View, wie zum Beispiel isEnabled:

@Environment(\.isEnabled) private var isEnabled: Bool

Anschließend lässt sich dieser Wert für jedes Element innerhalb der View verwenden. Der Inhalt dieser Variablen verändert sich, sobald sich der Wert der eigentlichen Umgebungsvariable ändert. Die View wird in einem solchen Fall automatisch aktualisiert.

ZStack

Der ZStack ist ein neues Element in SwiftUI. So wie der VStack Elemente vertikal und der HStack horizontal, ordnet ein ZStack alle Elemente übereinander an. Man verwendet dieses Element, wenn man mehrere Views abhängig von bestimmten Bedingungen austauschen oder Ansichten wechseln möchte.

Weitere Artikel aus unserem Blog

let’s dev Blog | iOS User Interface Tests

Technical

iOS User Interface Tests

by Nicolas

2020-11-12

Weiterlesen
let’s dev Blog | Adobe Max - Zum ersten Mal online

Corporate

Adobe Max - Zum ersten Mal online

by Julia

2020-10-29

Weiterlesen
let’s dev Blog | CAN2BLE

Technical

CAN2BLE

by Raphael

2020-09-24

Weiterlesen
let’s dev Blog | Mensch und Computer 2020 - Digitaler Wandel im Fluss der Zeit

Corporate

Mensch und Computer 2020 - Digitaler Wandel im Fluss der Zeit

by UX Team

2020-09-18

Weiterlesen
let’s dev Blog | Neumorphism – Eine neue Ära des User Interface Design?

Technical

Neumorphism – Eine neue Ära des User Interface Design?

by Julian

2020-08-13

Weiterlesen
let’s dev Blog | UX Research Teil 3 – UX Methoden

Technical

UX Research Teil 3 – UX Methoden

by Elena

2020-05-28

Weiterlesen
let’s dev Blog | UX Research Teil 2 - Was ist UCD und was hat User Research damit zu tun?

Technical

UX Research Teil 2 - Was ist UCD und was hat User Research damit zu tun?

by Elena

2020-04-23

Weiterlesen
let’s dev Blog | go-digital fördert Einrichtung von Home Office Arbeitsplätzen

Corporate

go-digital fördert Einrichtung von Home Office Arbeitsplätzen

by Karl

2020-03-19

Weiterlesen
let’s dev Blog | Google Passes - Karten­verwaltung auf  Android-Geräten

Technical

Google Passes - Karten­verwaltung auf Android-Geräten

by Michelle

2020-03-12

Weiterlesen
let’s dev Blog | 100% Code-Coverage bei Software Tests – eine sinnvolle Zielsetzung?

Technical

100% Code-Coverage bei Software Tests – eine sinnvolle Zielsetzung?

by Raphael

2020-03-06

Weiterlesen
let’s dev Blog | Im Dialog mit den Wirtschafts­junioren – Spannende Einblicke in die Unternehmens­gründung und die digitale Trans­formation

Corporate

Im Dialog mit den Wirtschafts­junioren – Spannende Einblicke in die Unternehmens­gründung und die digitale Trans­formation

by Julian

2020-02-27

Weiterlesen
let’s dev Blog | Vereinfachtes Testen von iOS Push Notifications im Simulator mit Xcode 11.4

Technical

Vereinfachtes Testen von iOS Push Notifications im Simulator mit Xcode 11.4

by Manuel

2020-02-26

Weiterlesen
let’s dev Blog | Nationales Meeting des Konsortiums des SPEAR Forschungs­projektes bei let’s dev in Karlsruhe

Corporate

Nationales Meeting des Konsortiums des SPEAR Forschungs­projektes bei let’s dev in Karlsruhe

by Karl

2020-01-27

Weiterlesen
let’s dev Blog | UX Research Teil 1 – Warum User Research so wichtig ist

Technical

UX Research Teil 1 – Warum User Research so wichtig ist

by Elena

2020-01-23

Weiterlesen
let’s dev Blog | Dark Mode

Technical

Dark Mode

by Elisa

2020-01-09

Weiterlesen
let’s dev Blog | Wir wünschen frohe Weihnachten – Und einen guten Start ins neue Jahr!

Corporate

Wir wünschen frohe Weihnachten – Und einen guten Start ins neue Jahr!

by Julian

2019-12-20

Weiterlesen
let’s dev Blog | Austausch zum Thema Digitalisierung mit dem Business Club Luxemburg in der Botschaft von Luxemburg in Berlin

Corporate

Austausch zum Thema Digitalisierung mit dem Business Club Luxemburg in der Botschaft von Luxemburg in Berlin

by Karl

2019-12-17

Weiterlesen
let’s dev Blog | DaSoMan auf der Internet+ Expo in Foshan (China)

Corporate

DaSoMan auf der Internet+ Expo in Foshan (China)

by Karl

2019-12-13

Weiterlesen
let’s dev Blog | Google Play Console: Pre-Launch Berichte

Technical

Google Play Console: Pre-Launch Berichte

by Fabian

2019-12-11

Weiterlesen
let’s dev Blog | DevFest 2019 in Hamburg

Technical

DevFest 2019 in Hamburg

by Julian

2019-12-05

Weiterlesen
let’s dev Blog | Vernissage digitale Kunst im Medientheater der Humboldt Universität Berlin

Corporate

Vernissage digitale Kunst im Medientheater der Humboldt Universität Berlin

by Karl

2019-11-21

Weiterlesen
let’s dev Blog | World Usability Day 2019 in Karlsruhe – let’s dev unterstützt als Hauptsponsor

Corporate

World Usability Day 2019 in Karlsruhe – let’s dev unterstützt als Hauptsponsor

by Aileen

2019-11-11

Weiterlesen
let’s dev Blog | Ausgeschlachtet - Tag der offenen Türen auf dem Alten Schlachthof Karlsruhe 2019

Corporate

Ausgeschlachtet - Tag der offenen Türen auf dem Alten Schlachthof Karlsruhe 2019

by Julian

2019-09-26

Weiterlesen
let’s dev Blog | Mensch und Computer 2019 - Konferenz zu User Experience und Usability in Hamburg

Corporate

Mensch und Computer 2019 - Konferenz zu User Experience und Usability in Hamburg

by Elena

2019-09-17

Weiterlesen
let’s dev Blog | Business und Enterprise App Verteilung unter iOS

Technical

Business und Enterprise App Verteilung unter iOS

by Aileen

2019-08-05

Weiterlesen
let’s dev Blog | Digital Transformation - Chances and Challenges in the Automotive Industry, Agriculture and New Technologies

Corporate

Digital Transformation - Chances and Challenges in the Automotive Industry, Agriculture and New Technologies

by Karl

2019-07-17

Weiterlesen
let’s dev Blog | let’s dev unterstützt Läuferinnen und Läufer bei der 7. KIT Meisterschaft

Corporate

let’s dev unterstützt Läuferinnen und Läufer bei der 7. KIT Meisterschaft

by Karl

2019-07-05

Weiterlesen
let’s dev Blog | Automatisiertes Testing von C++ Code mit Google Test und Google Mock – Teil 2

Technical

Automatisiertes Testing von C++ Code mit Google Test und Google Mock – Teil 2

by Arne

2019-06-13

Weiterlesen
let’s dev Blog | Apple WWDC 2019: Das sind die Highlights der Keynote

Technical

Apple WWDC 2019: Das sind die Highlights der Keynote

by Nicolas

2019-06-05

Weiterlesen
let’s dev Blog | App Builders 2019

Technical

App Builders 2019

by Nicolas

2019-05-23

Weiterlesen
let’s dev Blog | Offizielle Eröffnung des Festigungs- und Expansionszentrums (FUX)

Corporate

Offizielle Eröffnung des Festigungs- und Expansionszentrums (FUX)

by Helena

2019-04-15

Weiterlesen
let’s dev Blog | Delegation aus Nottingham zu Besuch auf dem Alten Schlachthof in Karlsruhe

Corporate

Delegation aus Nottingham zu Besuch auf dem Alten Schlachthof in Karlsruhe

by Helena

2019-04-14

Weiterlesen
let’s dev Blog | Es ist soweit: Wir ziehen um!

Corporate

Es ist soweit: Wir ziehen um!

by Helena

2019-03-26

Weiterlesen
let’s dev Blog | Automatisiertes Testing von C++ Code mit Frameworks – Teil 1

Technical

Automatisiertes Testing von C++ Code mit Frameworks – Teil 1

by Arne

2019-02-20

Weiterlesen
let’s dev Blog | Die App im Google Play Store

Technical

Die App im Google Play Store

by Elisa

2019-01-24

Weiterlesen
let’s dev Blog | „UX Day“ 2018

Corporate

„UX Day“ 2018

by Aileen

2018-12-17

Weiterlesen
let’s dev Blog | let’s dev unterstützt SG Siemens Volleyballer aus Karlsruhe

Corporate

let’s dev unterstützt SG Siemens Volleyballer aus Karlsruhe

by Helena

2018-12-04

Weiterlesen
let’s dev Blog | KMU gestalten die Digitalisierung – Mittelstandskonferenz 2018

Corporate

KMU gestalten die Digitalisierung – Mittelstandskonferenz 2018

by Helena

2018-11-12

Weiterlesen
let’s dev Blog | Apple Wallet

Technical

Apple Wallet

by Maik

2018-10-26

Weiterlesen
let’s dev Blog | „Mensch und Computer“ 2018

Corporate

„Mensch und Computer“ 2018

by Judith

2018-09-24

Weiterlesen
let’s dev Blog | State Design Pattern in Android

Technical

State Design Pattern in Android

by Thomas

2018-09-17

Weiterlesen
let’s dev Blog | let’s dev ist autorisiertes Beraterunternehmen im Förderprogramm „go-digital“

Corporate

let’s dev ist autorisiertes Beraterunternehmen im Förderprogramm „go-digital“

by Helena

2018-09-01

Weiterlesen
let’s dev Blog | App Design & Development Conference 2018

Corporate

App Design & Development Conference 2018

by Helena

2018-08-14

Weiterlesen
let’s dev Blog | iOS 12: Die Top-Neuerungen im Überblick

Technical

iOS 12: Die Top-Neuerungen im Überblick

by Nicolas

2018-07-17

Weiterlesen
let’s dev Blog | let’s dev auf der CEBIT

Corporate

let’s dev auf der CEBIT

by Karl

2018-06-11

Weiterlesen
let’s dev Blog | Einführung in User Interface (UI) Tests mit Espresso

Technical

Einführung in User Interface (UI) Tests mit Espresso

by Raphael

2018-06-07

Weiterlesen
let’s dev Blog | Die App im Apple App Store: welche Informationen werden benötigt?

Technical

Die App im Apple App Store: welche Informationen werden benötigt?

by Aileen

2018-04-27

Weiterlesen
let’s dev Blog | Smart Pointer in C++

Technical

Smart Pointer in C++

by Matthias

2018-04-01

Weiterlesen
let’s dev Blog | User Interface Design für das iPhone X: alle Neuerungen auf einen Blick

Technical

User Interface Design für das iPhone X: alle Neuerungen auf einen Blick

by Helena

2018-02-07

Weiterlesen
let’s dev Blog | WebVR – Virtual Reality Experience im Browser mit dem A-Frame Framework

Technical

WebVR – Virtual Reality Experience im Browser mit dem A-Frame Framework

by Judith

2018-01-10

Weiterlesen
let’s dev Blog | Open Data Hackathon der Deutschen Bahn

Corporate

Open Data Hackathon der Deutschen Bahn

by Karl

2015-03-31

Weiterlesen
let’s dev Blog | Blur-Effekte unter iOS 7

Technical

Blur-Effekte unter iOS 7

by Katja

2014-04-24

Weiterlesen
let’s dev Blog | Beyond App Store – Distribution von iOS-Anwendungen

Technical

Beyond App Store – Distribution von iOS-Anwendungen

by Karl

2012-08-27

Weiterlesen
let’s dev Blog | Frontend-Architektur – Model View Presenter und Message Bus

Technical

Frontend-Architektur – Model View Presenter und Message Bus

by Karl

2011-03-08

Weiterlesen