P'app - Ongoing
Proftaak - Smart Mobile 32
Crew
Marco Lemmens
Swift programmer
Mick Wonnink
App structure designer
& programmer
Wouter Noij
PHP programmer
Marco Lemmens
Swift programmer
Mick Wonnink
App structure designer
& programmer
Wouter Noij
PHP programmer
Project Description
In this course you’re going to work with a multidisciplinary group of fellow students, to create an app for Apple’s iOS platform. Besides the group project, you will create an individual research component to support the project. To maximize the result in the limited set of time available, a number of deliverables have been defined:
- Group rules and values
- Concept document
- Feature list
- Background research document
- Task list (to be adjusted every week
- Paper prototype recording
- System Architecture model
- Intermediate demo
- Promotion material
- Final result: Demo + promotion material + product
- Individual reflection + portfolio
Mutual agreements and cooperation
To keep things clear and simple, we use a Trello group. This is necessary for this kind of big projects.
Because of the many different aspects of projects like this, everyone needs to have a key function within the team, while at the same time knowing what the others are working on. With methods like "Scrum", it is easy to accomplish
GUI elements
Database model
Classes diagram
Proof of concepts
Compass, lock, and swipe
...
override func viewDidLoad() {
super.viewDidLoad()
print(planeImage.center.y)
initY = planeImage.center.y
force1.alpha = 0
force2.alpha = 0
force3.alpha = 0
force4.alpha = 0
force5.alpha = 0
force6.alpha = 0
force7.alpha = 0
planeImage.userInteractionEnabled = true
let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "singleTapping:")
singleTap.numberOfTapsRequired = 1
planeImage.addGestureRecognizer(singleTap)
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
lm = CLLocationManager()
lm.delegate = self
lm.startUpdatingHeading()
let camera = GMSCameraPosition.cameraWithLatitude(self.currentLat,
longitude: self.currentLon, zoom: 7, bearing: 30, viewingAngle: 0)
mapView.camera = camera
mapView.mapType = kGMSTypeNormal
mapView.myLocationEnabled = true
}
...
View full code
Map markers, history of paper planes
...
func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: { (placemarks, error) ->
Void in
if error != nil{
print("Error: " + (error!.localizedDescription))
return
}
if placemarks!.count > 0{
let pm = placemarks![0]
self.currentLat = Double((pm.location?.coordinate.latitude)!)
self.currentLon = Double((pm.location?.coordinate.longitude)!)
if self.firstLoop == true{
self.updateMapCenter()
self.firstLoop = false
}
}
})
}
func updateMapCenter(){
let location = CLLocationCoordinate2D(latitude: self.currentLat, longitude: self.currentLon)
mapView.animateToLocation(location)
}
func showAllMarkers(){
let url = "http://athena.fhict.nl/users/i278062/tomar/json.php"
Alamofire.request(.GET, url).responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
for index in 0...json["people"].count - 1 {
let title = String(json["people"][index]["locationName"])
let personName = String(json["people"][index]["name"])
let personLat = String(json["people"][index]["lat"])
let personLon = String(json["people"][index]["lon"])
let degree = String(json["people"][index]["degree"])
let vliegtuigID = String(json["people"][index]["id"])
let iconRotation: CLLocationDegrees = Double(degree)!
let marker = GMSMarker()
marker.position = CLLocationCoordinate2DMake(Double(personLat)!, Double(personLon)!)
marker.title = title
marker.snippet = "van: " + personName
marker.icon = UIImage(named: "markerIcon")
marker.rotation = iconRotation
marker.flat = true
marker.userData = vliegtuigID
marker.map = self.mapView
}
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
...
View full code
Research
Swipe or throw
Nothing to see here.. Yet.
Action button placement
Click here for the article
Promotion material
Nothing to see here.. Yet.