APP
Cocoa Touch - UIKit
Media
Core Services - Foundation
Core OS
=====================
Link:
http://www.cnblogs.com/kkun/archive/2012/04/25/2470166.html
=====================
UIKit:
Prefix: UI
Examples: UIApplication, UIWindow, UIScreen, UIView, UIViewController...etc.
Foundation:
Prefix: NS
Examples: NSData, NSDate, NSInteger, NSArray, NSLog, ...etc.
This blog is about Apple's Swift programming language with iOS, Xcode, and iPhone.
Related Information: Electrical and Computer Engineering - StudyEECC
Biomedical Engineering -
StudyBME
Python - Study Raspberry Pi
Thursday, November 27, 2014
Monday, November 24, 2014
CIFilter - Invert the photo color by built-in filter
//Updated December 22, 2014:
//Keep the photo orientation.
//Updated December 30, 2014
//Remove the error: BSXPCMessage received error for message: Connection interrupted
//Modify this: CIContext(options:[kCIContextUseSoftwareRenderer: true])
//Keep the photo orientation.
//Updated December 30, 2014
//Remove the error: BSXPCMessage received error for message: Connection interrupted
//Modify this: CIContext(options:[kCIContextUseSoftwareRenderer: true])
import UIKit
class ViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var picture: UIImageView!
@IBAction func photoAlbum(sender: AnyObject) {
if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)) {
var pickerController = UIImagePickerController()
pickerController.delegate = self
self.presentViewController(pickerController, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let uiPictureSelected = info[UIImagePickerControllerOriginalImage] as UIImage
let myOrientation : UIImageOrientation = uiPictureSelected.imageOrientation //Keep the photo orientation.
let ciPictureSelected = CIImage(image:uiPictureSelected)
var myFilter = CIFilter(name: "CIColorInvert")
myFilter.setValue(ciPictureSelected, forKey: kCIInputImageKey)
let ciOutputImage = myFilter.outputImage
let ciContext = CIContext(options:[kCIContextUseSoftwareRenderer: true])
let cgOutputImage = ciContext.createCGImage(ciOutputImage, fromRect: ciOutputImage.extent())
let uiOutputImage = UIImage(CGImage: cgOutputImage, scale: 1, orientation: myOrientation)
self.picture.image = uiOutputImage
picker.dismissViewControllerAnimated(true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
Tuesday, November 18, 2014
UIImagePickerControllerSourceType.Camera - Take a photo
1. Drag a UIImageView and Button to the storyboard.
Adjust the view mode of UIImageView to Aspect Fit
2. Control-drag to create:
3. Add delegates
Adjust the view mode of UIImageView to Aspect Fit
2. Control-drag to create:
@IBOutlet weak var picture: UIImageView!
@IBAction func takePhoto(sender: AnyObject) {
}
3. Add delegates
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
4. Complete Code:
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var picture: UIImageView!
@IBAction func takePhoto(sender: AnyObject) {
if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)) {
var pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.sourceType = UIImagePickerControllerSourceType.Camera
self.presentViewController(pickerController, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let pictureTaken = info[UIImagePickerControllerOriginalImage] as UIImage
self.picture.image = pictureTaken
UIImageWriteToSavedPhotosAlbum(pictureTaken, nil, nil, nil)
picker.dismissViewControllerAnimated(true, completion: nil)
}
Monday, November 17, 2014
presentViewController(pickerController - Show a photo from the photo album
Updated with Xcode 7.1/Swift 2.1 (November 11, 2015):
Edit ViewController.swift as below:
Original Post (November 17, 2014):
1. Drag a UIImageView and Button to the storyboard.
Adjust the view mode of UIImageView to Aspect Fit
2. Control-drag to create:
3. Add delegates
Edit ViewController.swift as below:
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var imageView : UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRectMake(70, 100, 200, 20))
button.setTitle("Pick a Photo", forState: UIControlState.Normal)
button.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
button.setTitleColor(UIColor.cyanColor(), forState: UIControlState.Highlighted)
button.addTarget(self, action: "photoAlbum:", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(button)
imageView = UIImageView(frame: CGRectMake(50, 150, 200, 200))
imageView.contentMode = UIViewContentMode.ScaleAspectFit
view.addSubview(imageView)
}
func photoAlbum(sender: UIButton) {
if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)) {
let pickerController = UIImagePickerController()
pickerController.delegate = self
self.presentViewController(pickerController, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let pictureSelected = info[UIImagePickerControllerOriginalImage] as! UIImage
imageView.image = pictureSelected
picker.dismissViewControllerAnimated(true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Original Post (November 17, 2014):
1. Drag a UIImageView and Button to the storyboard.
Adjust the view mode of UIImageView to Aspect Fit
2. Control-drag to create:
@IBOutlet weak var picture: UIImageView!
@IBAction func photoAlbum(sender: AnyObject) {
}
3. Add delegates
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
4. Complete Code:
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var picture: UIImageView!
@IBAction func photoAlbum(sender: AnyObject) {
if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)) {
var pickerController = UIImagePickerController()
pickerController.delegate = self
self.presentViewController(pickerController, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let pictureSelected = info[UIImagePickerControllerOriginalImage] as UIImage
self.picture.image = pictureSelected
picker.dismissViewControllerAnimated(true, completion: nil)
}
Saturday, October 25, 2014
NSThread.detachNewThreadSelector
override func viewDidLoad() {
super.viewDidLoad()
NSThread.detachNewThreadSelector(Selector("mythread"), toTarget: self, withObject: nil)
println("End viewDidLoad()")
}
func mythread() {
NSThread.sleepForTimeInterval(1.0)
for var i = 1 ; i <= 5 ; i++ {
println("\(i)")
}
}
==========================
Output:
End viewDidLoad()
1
2
3
4
5
Monday, October 6, 2014
MKDirections - Draw a route from location A to location B
Updated with Xcode 8.0 (Swift 3) on September 19, 2016.
Updated with Xcode 7.3.1 (Swift 2.2) on June 15, 2016.
Updated as a simple tutorial on May 25, 2015.
1. Disable 'Use Auto Layout' in the storyboard file inspector.
2. Drag a MapKit View to the storyboard.
3. Control-drag the MapKit View from the storyboard to ViewController.swift. Name the MapKit 'myMap'.
======
Previous Post (May 25, 2015):
import UIKit
Updated with Xcode 7.3.1 (Swift 2.2) on June 15, 2016.
Updated as a simple tutorial on May 25, 2015.
1. Disable 'Use Auto Layout' in the storyboard file inspector.
2. Drag a MapKit View to the storyboard.
3. Control-drag the MapKit View from the storyboard to ViewController.swift. Name the MapKit 'myMap'.
The result is:
@IBOutlet weak var myMap: MKMapView!
4. Complete the code as below:
Update (September 19, 2016): Xcode 8.0 (Swift 3)
======
Update (June 15, 2016): Xcode 7.3.1 (Swift 2.2)
Update (September 19, 2016): Xcode 8.0 (Swift 3)
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var myMap: MKMapView!
var myRoute : MKRoute!
override func viewDidLoad() {
super.viewDidLoad()
let point1 = MKPointAnnotation()
let point2 = MKPointAnnotation()
point1.coordinate = CLLocationCoordinate2DMake(25.0305, 121.5360)
point1.title = "Taipei"
point1.subtitle = "Taiwan"
myMap.addAnnotation(point1)
point2.coordinate = CLLocationCoordinate2DMake(24.9511, 121.2358)
point2.title = "Chungli"
point2.subtitle = "Taiwan"
myMap.addAnnotation(point2)
myMap.centerCoordinate = point2.coordinate
myMap.delegate = self
//Span of the map
myMap.setRegion(MKCoordinateRegionMake(point2.coordinate, MKCoordinateSpanMake(0.7,0.7)), animated: true)
let directionsRequest = MKDirectionsRequest()
let markTaipei = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point1.coordinate.latitude, point1.coordinate.longitude), addressDictionary: nil)
let markChungli = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point2.coordinate.latitude, point2.coordinate.longitude), addressDictionary: nil)
directionsRequest.source = MKMapItem(placemark: markChungli)
directionsRequest.destination = MKMapItem(placemark: markTaipei)
directionsRequest.transportType = MKDirectionsTransportType.automobile
let directions = MKDirections(request: directionsRequest)
directions.calculate(completionHandler: {
response, error in
if error == nil {
self.myRoute = response!.routes[0] as MKRoute
self.myMap.add(self.myRoute.polyline)
}
})
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let myLineRenderer = MKPolylineRenderer(polyline: myRoute.polyline)
myLineRenderer.strokeColor = UIColor.red
myLineRenderer.lineWidth = 3
return myLineRenderer
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
======
Update (June 15, 2016): Xcode 7.3.1 (Swift 2.2)
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var myMap: MKMapView!
var myRoute : MKRoute!
override func viewDidLoad() {
super.viewDidLoad()
let point1 = MKPointAnnotation()
let point2 = MKPointAnnotation()
point1.coordinate = CLLocationCoordinate2DMake(25.0305, 121.5360)
point1.title = "Taipei"
point1.subtitle = "Taiwan"
myMap.addAnnotation(point1)
point2.coordinate = CLLocationCoordinate2DMake(24.9511, 121.2358)
point2.title = "Chungli"
point2.subtitle = "Taiwan"
myMap.addAnnotation(point2)
myMap.centerCoordinate = point2.coordinate
myMap.delegate = self
//Span of the map
myMap.setRegion(MKCoordinateRegionMake(point2.coordinate, MKCoordinateSpanMake(0.7,0.7)), animated: true)
let directionsRequest = MKDirectionsRequest()
let markTaipei = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point1.coordinate.latitude, point1.coordinate.longitude), addressDictionary: nil)
let markChungli = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point2.coordinate.latitude, point2.coordinate.longitude), addressDictionary: nil)
directionsRequest.source = MKMapItem(placemark: markChungli)
directionsRequest.destination = MKMapItem(placemark: markTaipei)
directionsRequest.transportType = MKDirectionsTransportType.Automobile
let directions = MKDirections(request: directionsRequest)
directions.calculateDirectionsWithCompletionHandler({
response, error in
if error == nil {
self.myRoute = response!.routes[0] as MKRoute
self.myMap.addOverlay(self.myRoute.polyline)
}
})
}
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
let myLineRenderer = MKPolylineRenderer(polyline: myRoute.polyline)
myLineRenderer.strokeColor = UIColor.redColor()
myLineRenderer.lineWidth = 3
return myLineRenderer
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
======
Previous Post (May 25, 2015):
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var myMap: MKMapView!
var myRoute : MKRoute?
override func viewDidLoad() {
super.viewDidLoad()
var point1 = MKPointAnnotation()
var point2 = MKPointAnnotation()
point1.coordinate = CLLocationCoordinate2DMake(25.0305, 121.5360)
point1.title = "Taipei"
point1.subtitle = "Taiwan"
myMap.addAnnotation(point1)
point2.coordinate = CLLocationCoordinate2DMake(24.9511, 121.2358)
point2.title = "Chungli"
point2.subtitle = "Taiwan"
myMap.addAnnotation(point2)
myMap.centerCoordinate = point2.coordinate
myMap.delegate = self
//Span of the map
myMap.setRegion(MKCoordinateRegionMake(point2.coordinate, MKCoordinateSpanMake(0.7,0.7)), animated: true)
var directionsRequest = MKDirectionsRequest()
let markTaipei = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point1.coordinate.latitude, point1.coordinate.longitude), addressDictionary: nil)
let markChungli = MKPlacemark(coordinate: CLLocationCoordinate2DMake(point2.coordinate.latitude, point2.coordinate.longitude), addressDictionary: nil)
directionsRequest.setSource(MKMapItem(placemark: markChungli))
directionsRequest.setDestination(MKMapItem(placemark: markTaipei))
directionsRequest.transportType = MKDirectionsTransportType.Automobile
var directions = MKDirections(request: directionsRequest)
directions.calculateDirectionsWithCompletionHandler { (response:MKDirectionsResponse!, error: NSError!) -> Void in
if error == nil {
self.myRoute = response.routes[0] as? MKRoute
self.myMap.addOverlay(self.myRoute?.polyline)
}
}
}
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
var myLineRenderer = MKPolylineRenderer(polyline: myRoute?.polyline!)
myLineRenderer.strokeColor = UIColor.redColor()
myLineRenderer.lineWidth = 3
return myLineRenderer
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
Saturday, October 4, 2014
mapView(_:viewForAnnotation:)- pinColor - Change the pin color on the map
Update April 11, 2016:
Draw the map and pin programmatically in Swift 2.2 with Xcode 7.3.
Result:
Debug Console:
addSubview(myMap)
addAnnotation
Pin Color Set
=======
Original post October 4, 2014:
import UIKit
Draw the map and pin programmatically in Swift 2.2 with Xcode 7.3.
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let point = MKPointAnnotation()
point.coordinate = CLLocationCoordinate2DMake(25.0305, 121.5360)
point.title = "Taipei"
point.subtitle = "Taiwan"
let myMap = MKMapView(frame: CGRectMake(0,20, view.frame.width, view.frame.height-20))
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
dispatch_async(dispatch_get_main_queue()) {
myMap.addAnnotation(point)
print("addAnnotation")
}
}
myMap.centerCoordinate = point.coordinate
myMap.delegate = self
//Span of the map
myMap.setRegion(MKCoordinateRegionMake(myMap.centerCoordinate, MKCoordinateSpanMake(0.2,0.2)), animated: true)
view.addSubview(myMap)
print("addSubview(myMap)")
}
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let annotationView = MKPinAnnotationView()
annotationView.pinTintColor = UIColor.orangeColor()
print("Pin Color Set")
return annotationView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Result:
Debug Console:
addSubview(myMap)
addAnnotation
Pin Color Set
Simulator:
=======
Original post October 4, 2014:
import UIKit
import CoreLocation
import MapKit
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var myMap: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
var point = MKPointAnnotation()
self.myMap.delegate = self
point.coordinate = CLLocationCoordinate2DMake(25.0305, 121.5360)
point.title = "Taipei"
point.subtitle = "Taiwan"
myMap.addAnnotation(point)
myMap.centerCoordinate = point.coordinate
myMap.selectAnnotation(point, animated: true)
//Span of the map
myMap.setRegion(MKCoordinateRegionMake(point.coordinate, MKCoordinateSpanMake(0.2,0.2)), animated: true)
println("Span of the map")
}
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if (annotation.isKindOfClass(MKUserLocation)){
return nil
}
var myPin = mapView.dequeueReusableAnnotationViewWithIdentifier("MyIdentifier") as? MKPinAnnotationView
if myPin != nil {
return myPin
}
myPin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "MyIdentifier")
myPin?.pinColor = .Green
return myPin
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Subscribe to:
Posts (Atom)




