2016-03-27 3 views
-1

Я создаю приложение, поэтому мне нужно знать, как я могу поместить текст в изображения.
Я работаю с Xcode 7 и Swift 2Как поместить текст в изображения в Swift?

У меня уже есть этот код, но он находится в Objective-C, и я не знаю, если это работает ...

- (UIImage *)burnTextIntoImage:(NSString *)text :(UIImage *)img { 
    UIGraphicsBeginImageContext(img.size); 

    CGRect aRectangle = CGRectMake(0,0, img.size.width, img.size.height); 
    [img drawInRect:aRectangle]; 

    [[UIColor redColor] set]; 
    NSInteger fontSize = 14; 
    if ([text length] > 200) { 
     fontSize = 10; 
    } 
    UIFont *font = [UIFont boldSystemFontOfSize: fontSize]; 

    [text drawInRect : aRectangle 
      withFont : font 
     lineBreakMode : UILineBreakModeTailTruncation 
      alignment : UITextAlignmentCenter ]; 

    UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return theImage; 
} 

ответ

1

Я попытался перевод код для Swift 2. Это так близко, как я получил:

extension UIImage { 
    func withText(text: String) -> UIImage { 
     UIGraphicsBeginImageContext(size) 

     let rectangle = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
     drawInRect(rectangle) 

     UIColor.redColor().set() 
     let fontSize = text.characters.count > 200 ? 10 : 14 
     let font = UIFont.boldSystemFontOfSize(CGFloat(fontSize)) 

     let attributes: [String: AnyObject] = [ 
      NSFontAttributeName: font 
     ] 
     (text as NSString).drawInRect(rectangle, withAttributes: attributes) 

     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return image 
    } 
} 

Как вы можете видеть NSString «s drawInRect в настоящее время занимает [String: AnyObject]? для его атрибутов. Мне не удалось найти соответствующие ключи для lineBreakMode и alignment.

Как documentation состояний:

Это те же самые атрибуты, которые могут быть применены к NSAttributedString объекта ...


Update:

Я добавил другие технические характеристики:

extension UIImage { 
    func withText(text: String) -> UIImage { 
     UIGraphicsBeginImageContext(size) 

     let rectangle = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
     drawInRect(rectangle) 

     let fontSize = text.characters.count > 200 ? 10 : 14 
     let font = UIFont.boldSystemFontOfSize(CGFloat(fontSize)) 

     let paragraphAttributes = NSMutableParagraphStyle() 
     paragraphAttributes.lineBreakMode = NSLineBreakMode.ByTruncatingTail 
     paragraphAttributes.alignment = NSTextAlignment.Center 

     let attributes: [String: AnyObject] = [ 
      NSFontAttributeName: font, 
      NSForegroundColorAttributeName: UIColor.redColor(), 
      NSParagraphStyleAttributeName: paragraphAttributes 
     ] 
     (text as NSString).drawInRect(rectangle, withAttributes: attributes) 

     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return image 
    } 
} 

И только упаковывают это было неясно, прежде чем ... Это, как вы бы использовать метод:

// `someImage` is an optional `UIImage` (`UIImage?`), as the initializer is failable 
let someImage = UIImage(named: "something.png") 

// `imageWithText` is of type `UIImage` here 
if let image = someImage { 
    let imageWithText = someImage.withText("Hello World") 
} 

// `imageWithText` is of type `UIImage?` here 
let imageWithText = someImage?.withText("Hello World") 
+0

Спасибо, но я попробовал код и он не работает ... Что я пытаясь сделать, это поместить некоторый текст в любое изображение ... Можете ли вы мне помочь? Спасибо !!! –

+0

Добавлено обновление. Я пробовал это на детской площадке, и это работает. –

+0

Спасибо, это сработало !!!! И, как я могу изменить размер текста, чтобы быть более крупным ??? –