coskukoz coskukoz - 2 months ago 9
Swift Question

Multiple Assignment on Swift

I want to assign more than one value to the variable. I have no idea how to do. Basically I want to put multiple texts on the image.

This is single assignment code(which is working fine):

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
ImageDisplay.image = textToImage("HERE IS FIRST LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 300))

}
dismissViewControllerAnimated(true, completion: nil)

}


I just want to assign more value to the ImageDisplay.image. Here I can show an (wrong) example:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
ImageDisplay.image = textToImage("HERE IS FIRST LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 100))
ImageDisplay.image = textToImage("HERE IS SECOND LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 200))
ImageDisplay.image = textToImage("HERE IS THIRD LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 300))
}
dismissViewControllerAnimated(true, completion: nil)

}


This is textToImage function:

func textToImage(drawText: NSString, inImage: UIImage, atPoint:CGPoint)->UIImage{

// Setup the font specific variables
let textColor: UIColor = UIColor.blackColor()
let textFont: UIFont = UIFont(name: "Helvetica Bold", size: 200)!

//Setup the image context using the passed image.
UIGraphicsBeginImageContext(inImage.size)

//Setups up the font attributes that will be later used to dictate how the text should be drawn
let textFontAttributes = [
NSFontAttributeName: textFont,
NSForegroundColorAttributeName: textColor,
]

//Put the image into a rectangle as large as the original image.
inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height))

// Creating a point within the space that is as bit as the image.
let rect: CGRect = CGRectMake(atPoint.x, atPoint.y, inImage.size.width, inImage.size.height)

//Now Draw the text into an image.
drawText.drawInRect(rect, withAttributes: textFontAttributes)

// Create a new image out of the images we have created
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()

// End the context now that we have the image we need
UIGraphicsEndImageContext()

//And pass it back up to the caller.
return newImage
}

Answer

Each time you call textToImage with "image" you are creating a new object with the provided string from the original image, but what you want is add the string to each previously build image. So you can do this :

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

   if var image = info[UIImagePickerControllerOriginalImage] as? UIImage {
     image = textToImage("HERE IS FIRST LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 100))
     image = textToImage("HERE IS SECOND LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 200))
     image = textToImage("HERE IS THIRD LABEL", inImage: image, atPoint: CGPoint( x: 400, y: 300))

     ImageDisplay.image = image            
  }
  dismissViewControllerAnimated(true, completion: nil)
}
Comments