FHWS - Hochschule für angewandte Wissenschaften Würzburg-Schweinfurt
Ihr müsst eine Wetter-App bauen!
Die App holt sich bei der Wetter-API von openweathermap die aktuellen Wetter-Daten für einen Ort (im Beispiel Würzburg).
http://api.openweathermap.org/data/2.5/weather?q=wuerzburg
Die zurückgelieferten Daten müssen vom JSON-Format in ein Swift-Datenmodell überführt werden (JSON parsen & in properties
ablegen).
Die App soll nun die wichtigen Wetterinformationen für den Nutzer dieser App anzeigen (Label mit Temperatur, Image mit Wettergrafik, usw...)
Wir haben euch Wetter-Grafiken zur Verfügung gestellt. Sie liegen als Sketch-Datei und pngs im Ordner WeatherApp_Assets.
Achtet hier auf Apples HIG! Lasst es schön & Apple-konform aussehen! :-)
Vervollständigt das im Git liegende 07_GesturesTutorial
um die vier fehlenden Gesten. Dabei gilt:
- zwei der vier GestureRecognizer müssen im Code implementiert werden
- zwei der vier GestureRecognizer müssen im Storyboard verknüpft sein
- gebt ein Feedback, wenn der GestureRecognizer ausgeführt wird
- im Simulator können mehrere Finger mit der
[alt]
-Taste simuliert werden. Die Finger können mit der[Shift]
-Taste verschoben werden.
Die Aufgabe muss bis spätestens Freitag, den 12.02.16 um 7:59 Uhr bei Andy & Flori als gültiger Git-Link eingegangen sein, so dass wir das Projekt auschecken können!
Der abgegebene Code muss ohne Fehler compilierbar sein und darf nicht(!) abstürzen. 'Warning Free' gehört zum guten Ton.
Jedes Teammitglied muss die grundlegende Funktionsweise der eigenen App erklären können.
Prüfungszeiten werden noch per Mail bekannt gegeben.
- Dieses Dokument regelmäßig prüfen, ob es aktualisiert wird
- Auf einem iPad/iPhone funktionieren Gesten besser als im Simulator (Peter gibt euch gerne Test-Geräte)
- Darauf achten, dass die App nicht abstürzt!
- kann beim String "Würzburg" passieren
- wenn keine Internet-Verbindung besteht
- wenn ein leerer Suchstring ("") angegeben wurde
- kann immer dann passieren, wenn ihr auf ein
nil
Objekt zugreift - kann passieren, wenn ein Wetter-Typ geliefert wird, für den keine Grafik existiert
- ...
- Versioniert euren Code mit Git!
- Peek & Pop sind Low-Hanging-Fruits
- Es besteht kein Zwang die vorgegebenen Wetter-Grafiken zu verwenden (Sie liegen immer noch als Sketch-Datei und pngs im Ordner WeatherApp_Assets). Es können auch eigene Grafiken verwendet werden. Beachtet dann die korrekten Auflösungen (
file.png
,[email protected]
&[email protected]
). - Wenn kein AutoLayout verwendet wird, dann doch bitte StackViews. AutoLayout muss erklärt werden können (z.B. Was ist eine Intrinsic Size)
- Denkt an
weak
- Gesten-Tipps:
CGAffineTransformScale(sender.view!.transform, sender.scale, sender.scale)
CGAffineTransformRotate(currentTrans, rotation)
sender.translationInView(self.view);sender.view!.center = CGPoint...;
sender.setTranslation(...)
drawFromPoint
fürFingerTouch
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first! as UITouch
start = touch.locationInView(view)
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first! as UITouch
let end = touch.locationInView(view)
}
func drawFromPoint(canvas:UIImageView, start: CGPoint, toPoint end: CGPoint , withColor:UIColor, lineWidth:CGFloat, alpha:CGFloat) -> UIImage {
UIGraphicsBeginImageContext(canvas.frame.size)
let context = UIGraphicsGetCurrentContext()
canvas.image?.drawInRect(CGRect(x: 0, y: 0,
width: canvas.frame.size.width, height: canvas.frame.size.height))
CGContextSetLineWidth(context, lineWidth)
CGContextSetAlpha(context, alpha);
CGContextSetStrokeColorWithColor(context, withColor.CGColor)
CGContextBeginPath(context)
CGContextMoveToPoint(context, start.x, start.y)
CGContextAddLineToPoint(context, end.x, end.y)
CGContextStrokePath(context)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
- Wenn eure App abstürzt achtet immer auf die Consolen-Ausgabe (von oben nach unten lesen):
this class is not key value coding-compliant for the key
ihr habt irgendwo im Storyboard ein 'Warndreieck'unrecognized selector sent to instance
ihr habt die Methode nicht korrekt deklariert
- Wenn ihr Fragen habt, könnt ihr gerne Andy & Flori eure Fragen per
Mail, Gitter oder Twitter stellen. - CamelCase. Haltet euch an die Konventionen der Plattform
- Wenn Xcode oder Swift nicht mehr richtig funktioniert, hilft ein
Product/Clean
oder alternativ ein Xcode Neustart. - Wer Klammern aufmacht, muss auch Klammern zumachen.
- Macht man es richtig, funktioniert es auch ;-)
- Twitter Account erstellen & den coolen Leuten Folgen (John Gruber, Chris Lattner & Greg Parker)
- Github Account erstellen und unserem Projekt beitreten in unseren Gitter.im Raum kommen
- Gitter-Raum
- Swift in a Browser: IBM Swift Sandbox
- Welcome to Swift.org
- Good Code Style
- How Do I Declare a Closure in Swift?
- git --everything-is-local
- Git Intro - Coenen
- Try Git
- Git Clients: Github Desktop, Git Tower & Sourcetree
- gitlab.com & github.com
- Lehrveranstaltung: iOS-Programmierung
- Fach- bzw. Prüfungsnummer: 5003087
- Modul: iOS-Programmierung
- Modulverantwortlicher: Prof. Dr. Braun (@pe_braun)
- Dozenten: Andreas Wittmann (@anwittmann) & Florian Bachmann (@florianbachmann)
- Semesterwochenstunden: 4
- Modulhandbuch: Modulhandbuch_Inf_2014-10-09.pdf
- Werb, Titzian; Hudalla, Joseph; Rost, Maximilian
- Bogomaz, Veronika; Yauk, Arina
- Nguyen, Tony; Burkhard; Jan, Ul-Haque, Danial
- Mierzwa, Filip, Lienert, Steffen, Eder, Thimo
- Hieser, Alexander; Barwanietz, Dominic; Schäfer, Philipp
- Keller, Felix; Hackel, Julius
- Gerasch, Stefan; Balz, Sebastian
- Triebig, Kim
- Volk, Christian
- Kiesel, Michael