2015-02-09 81 views
0

我试图通过添加文本,以它来编辑图像,但我从这篇文章得到了代码不起作用:How to write text on image in Objective-C (iOS)?斯威夫特:将文本添加到图像不起作用

我的图像编辑的代码看起来像这样的:

func addTextToImage(image:UIImage, text:NSString, pointof: CGPoint) -> UIImage{ 

    let font:UIFont = UIFont.boldSystemFontOfSize(12) 

    let dict:NSDictionary = [NSFontAttributeName : font] 

    UIGraphicsBeginImageContext(image.size) 
    image.drawInRect(CGRectMake(0, 0, image.size.width, image.size.height)) 
    let rect: CGRect = CGRectMake(pointof.x, pointof.y, image.size.width, image.size.height) 
    let color: UIColor = UIColor.whiteColor() 
    text.drawInRect(CGRectIntegral(rect), withAttributes:dict) 

    let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

然后我用textViewDidChange方法来添加文本到图像,但它不工作:什么我做错了W¯¯

func textViewDidChange(textView: UITextView){ 
    backgroundImage.image = addTextToImage(imageToView, text: textViewer.text, pointof: CGPointMake(0, 0)) 
} 

任何建议不胜感激。

+0

首先我们需要知道什么是错的。 “不起作用”没有帮助。你的代码给了什么结果?是否调用了textViewDidChange?实际上是否创建了newImage? – rdelmar 2015-02-09 23:50:56

+0

@rdelmar什么也没有发生,textViewDidChange被调用,因此我认为它正在创建。 – martin 2015-02-09 23:53:03

+0

不要假设。在“return newImage”之前放置一个print语句,并查看newImage是否为非零。 – rdelmar 2015-02-09 23:54:32

回答

0
func addTextToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage 
{ 
    let textColor = UIColor.blue 

    let textFont = UIFont(name: "ChalkboardSE-Regular", size: 26)! 

    let scale = UIScreen.main.scale 
    UIGraphicsBeginImageContextWithOptions(image.size, false, scale) 

    let textFontAttributes = [ 
     NSFontAttributeName: textFont, 
     NSForegroundColorAttributeName: textColor, 
     ] as [String : Any] 

    image.draw(in: CGRect(origin: CGPoint.zero, size: image.size)) 

    let rect = CGRect(origin: point, size: image.size) 
    text.draw(in: rect, withAttributes: textFontAttributes) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage! 
}