2016-09-27 4 views
1

Я хочу присвоить переменную несколько значений. Я понятия не имею, как это сделать. В принципе, я хочу поместить несколько изображений на изображение.Несколько назначений на Swift

Это единый код присваивания (который работает отлично):

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) 

} 

Я просто хочу, чтобы присвоить большую ценность для ImageDisplay.image. Здесь я могу показать (неправильный) пример:

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) 

} 

Это textToImage функция:

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 
} 
+0

где textToImage? –

+0

@UmairAfzal Я обновил функцию textToImage – coskukoz

ответ

1

Каждый раз, когда вы call textToImage с «изображением» вы создаете новый объект с предоставленной строкой из исходного изображения, но то, что вы хотите, добавляет строку к каждому ранее созданному изображению. Итак, вы можете это сделать:

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) 
} 
+0

Самый простой способ. Работает отлично – coskukoz

0

Вашего код значит:

let a = textToImage("HERE IS FIRST LABEL", inImage: image, atPoint: CGPoint(x: 400, y: 100)) 
ImageDisplay.image = a 
let b = textToImage("HERE IS SECOND LABEL", inImage: image, atPoint: CGPoint(x: 400, y: 200)) 
ImageDisplay.image = b 
let c = textToImage("HERE IS THIRD LABEL", inImage: image, atPoint: CGPoint(x: 400, y: 300)) 
ImageDisplay.image = c 

ваших ImageDisplay.image магазинов только последние данные (c переменная)

Сохранить a и b где-то тоже, чтобы использовать их позже. или изменить textToImage функция к новой.

EDIT Этот код работает (я тестировал):

//..somewhere 
    guard let img = UIImage(named:"telephone40.png") else { 
      return 
     }//UIImage.init() 
     //  img.size = CGSizeMake(500,500) 
     var tmpImg = textToImage(["HERE IS FIRST LABEL","HERE IS SECOND LABEL","HERE IS THIRD LABEL"], inImage: img, atPoints: [CGPoint(x: 0, y: 10),CGPoint(x: 20, y: 30),CGPoint(x: 40, y: 50)]) 
//result <<<<  

//function: 

    func textToImage(drawTexts: [NSString], inImage: UIImage, atPoints:[CGPoint])->UIImage{ 

     // Setup the font specific variables 
     let textColor: UIColor = UIColor.blackColor() 
     let textFont: UIFont = UIFont(name: "Helvetica Bold", size: 200)! 
     //Setups up the font attributes that will be later used to dictate how the text should be drawn 

     let textFontAttributes = [ 
      NSFontAttributeName: textFont, 
      NSForegroundColorAttributeName: textColor, 
      ] 
     //Setup the image context using the passed image. 
     UIGraphicsBeginImageContext(inImage.size) 
     //Put the image into a rectangle as large as the original image. 
     inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height)) 
     for i in 0..<drawTexts.count { 
      let drawText = drawTexts[i] 
      let atPoint = atPoints[i] 



      // 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 
    } 
+0

Вы правы __ImageDisplay.image__ хранит только последние данные. Но я хочу показать все тексты на одном изображении. – coskukoz

+0

w8 я изменение код функции – Vyacheslav

+0

@coskukoz сделано. используйте – Vyacheslav

1

Мое предположение было бы приковать звонки в textToImage(...) на временной UIImage:

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

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     var tmpImg = textToImage("HERE IS FIRST LABEL", inImage: image, atPoint: CGPoint(x: 400, y: 100)) 
     tmpImg = textToImage("HERE IS SECOND LABEL", inImage: tmpImg, atPoint: CGPoint(x: 400, y: 200)) 
     tmpImg = textToImage("HERE IS THIRD LABEL", inImage: tmpImg, atPoint: CGPoint(x: 400, y: 300)) 
     ImageDisplay.image = tmpImg 
    } 
    dismissViewControllerAnimated(true, completion: nil) 
} 
Смежные вопросы