P'app - Ongoing

Proftaak - Smart Mobile 32


Crew

Marco Lemmens
Swift programmer

Joey Geraeds
Designer & creator

Mick Wonnink
App structure designer
& programmer

Nard Broekstra
Researcher

Wouter Noij
PHP programmer

Marijn Kleuskens
GUI designer


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.
More to follow soon...