2017-05-21 1 views
1

J'ai une application de base de l'appareil photo. Lorsque je prends une photo, cette image est ensuite transmise au contrôleur ci-dessous. Je veux être en mesure d'ajouter du texte à l'image transmise, de la faire glisser le long de la vue, de la mettre à l'échelle, etc., mais je ne peux même pas ajouter du texte sur l'image. J'ai essayé un tas de didacticiels modernes en ligne like this for example mais rien.Comment ajouter du texte à une image dans Swift 3?

Quelqu'un peut-il fournir des exemples?

class PhotoViewController: UIViewController { 


override var prefersStatusBarHidden: Bool { 
    return true 
} 

var lastPoint = CGPoint.zero 
var red: CGFloat = 1.0 
var green: CGFloat = 1.0 
var blue: CGFloat = 1.0 
var brushWidth: CGFloat = 10.0 
var opacity: CGFloat = 1.0 
var swiped = false 

var backgroundImage: UIImage? 

let backgroundImageView = UIImageView() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    backgroundImageView.frame = self.view.frame 
    backgroundImageView.contentMode = UIViewContentMode.scaleAspectFit 
    backgroundImageView.isUserInteractionEnabled = true 

    self.view.backgroundColor = UIColor.black 
    backgroundImageView.image = backgroundImage 
    view.addSubview(backgroundImageView) 

    let backButton: UIButton = UIButton(frame: CGRect(x: 20, y: 20, width: 25, height: 25)) 
    let image = UIImage(named: "back_button") 
    backButton.setImage(image, for: .normal) 
    backButton.addTarget(self, action: #selector(handleBackButton), for: .touchUpInside) 
    view.addSubview(backButton) 

    let postButton = UIButton(type: .system) 
    postButton.setTitle("Post", for: .normal) 
    postButton.addTarget(self, action: #selector(uploadPost), for: .touchUpInside) 
    view.addSubview(postButton) 

    _ = postButton.anchor(nil, left: nil, bottom: view.bottomAnchor, right: view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 12, rightConstant: 12, widthConstant: 50, heightConstant: 50) 

    let saveImageButton = UIButton(type: .system) 
    let saveImageButtonImage = UIImage(named: "save_camera")?.withRenderingMode(.alwaysTemplate) 
    saveImageButton.setImage(saveImageButtonImage, for: .normal) 
    saveImageButton.tintColor = .white 
    saveImageButton.addTarget(self, action: #selector(handleSaveImage), for: .touchUpInside) 
    view.addSubview(saveImageButton) 

    _ = saveImageButton.anchor(nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: nil, topConstant: 0, leftConstant: 12, bottomConstant: 12, rightConstant: 0, widthConstant: 50, heightConstant: 50) 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = false 
    if let touch = touches.first { 
     lastPoint = touch.location(in: self.view) 
    } 
} 

func drawLine(from fromPoint: CGPoint, to toPoint: CGPoint) { 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0) 

    backgroundImageView.image?.draw(in: view.bounds) 

    let context = UIGraphicsGetCurrentContext() 

    context?.move(to: fromPoint) 
    context?.addLine(to: toPoint) 

    context?.setLineCap(CGLineCap.round) 
    context?.setLineWidth(brushWidth) 
    context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0) 
    context?.setBlendMode(CGBlendMode.normal) 
    context?.strokePath() 

    backgroundImageView.image = UIGraphicsGetImageFromCurrentImageContext() 
    backgroundImageView.alpha = opacity 
    UIGraphicsEndImageContext() 
} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = true 
    if let touch = touches.first { 
     let currentPoint = touch.location(in: view) 
     drawLine(from: lastPoint, to: currentPoint) 

     lastPoint = currentPoint 
    } 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if !swiped { 
     // draw a single point 
     self.drawLine(from: lastPoint, to: lastPoint) 
    } 
} 
+0

Le didacticiel auquel vous avez lié un excellent exemple d'utilisation de 'NSString.draw()' pour dessiner du texte sur une image. Qu'est-il arrivé quand vous l'avez essayé? – Robert

+0

vous pouvez aller [Texte sur Image1] (http://stackoverflow.com/questions/28906914/how-do-i-add-text-to-an-image-in-ios-swift/30185702) ou [Texte sur Image1] (http://stackoverflow.com/questions/39457767/overlaying-text-on-image-using-swift) – Foolish

+0

vous pouvez aller [Ajouter un texte sur ImageView Swift 3] (http://stackoverflow.com/questions/ 39457767/overlaying-text-on-image-using-swift) ou [Comment ajouter du texte sur ImageView] (http://stackoverflow.com/questions/28906914/how-do-i-add-text-to-an- image-in-ios-swift/30185702) – Foolish

Répondre

2

Il n'y a pas moyen simple de faire tout cela, mais voici un code pour votre premier chanllenge.

class ViewController: UIViewController { 

    @IBOutlet weak var storyboardImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let image = createFinalImageText() { 
      storyboardImageView.image = image 
     } 
    } 

    func createFinalImageText() -> UIImage? { 

     let image = UIImage(named: "bear.jpeg") 

     let viewToRender = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.width)) // here you can set the actual image width : image.size.with ?? 0/height : image.size.height ?? 0 

     let imgView = UIImageView(frame: viewToRender.frame) 

     imgView.image = image 

     viewToRender.addSubview(imgView) 

     let textImgView = UIImageView(frame: viewToRender.frame) 

     textImgView.image = imageFrom(text: "Example text", size: viewToRender.frame.size) 

     viewToRender.addSubview(textImgView) 

     UIGraphicsBeginImageContextWithOptions(viewToRender.frame.size, false, 0) 
     viewToRender.layer.render(in: UIGraphicsGetCurrentContext()!) 
     let finalImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return finalImage 
    } 

    func imageFrom(text: String , size:CGSize) -> UIImage { 

     let renderer = UIGraphicsImageRenderer(size: size) 
     let img = renderer.image { ctx in 
      let paragraphStyle = NSMutableParagraphStyle() 
      paragraphStyle.alignment = .center 

      let attrs = [NSFontAttributeName: UIFont(name: "HelveticaNeue", size: 36)!, NSForegroundColorAttributeName: UIColor.white, NSParagraphStyleAttributeName: paragraphStyle] 

      text.draw(with: CGRect(x: 0, y: size.height/2, width: size.width, height: size.height), options: .usesLineFragmentOrigin, attributes: attrs, context: nil) 

     } 
     return img 
    } 
} 

enter image description here

J'espère que cela vous aidera.