したいこと
UIImageViewで読み込んでいる画像と、その上にあるUILabelを一つの画像として書き出したいです。
試したこと
さまざまな記事など読み、試しましたがあまり良くわからず、結果的に実装できていません。
コード
Swift
import UIKit class EditViewController: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate { @IBOutlet weak var imageLabel: UILabel! @IBOutlet weak var fontSlider: UISlider! @IBOutlet weak var pictureView: UIImageView! // @IBOutlet weak var OpacitySlider: UISlider! // 不透明度のSlider 今後のUPD対象 override func viewDidLoad() { super.viewDidLoad() // Screen Size の取得 let screenWidth:CGFloat = view.frame.size.width let screenHeight:CGFloat = view.frame.size.height // Labelのフレームを設定 imageLabel.frame = CGRect(x:0, y:0, width:343, height:110) // Labelをスクリーン中央に設定 imageLabel.center = CGPoint(x:screenWidth/2, y:screenHeight/2) // タッチ操作を enable imageLabel.isUserInteractionEnabled = true self.view.addSubview(imageLabel) // Do any additional setup after loading the view. } // 画面にタッチで呼ばれる override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { print("touchesBegan") } // ドラッグ時に呼ばれる override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { // タッチイベントを取得 let touchEvent = touches.first! // ドラッグ前の座標, Swift 1.2 から let preDx = touchEvent.previousLocation(in: self.view).x let preDy = touchEvent.previousLocation(in: self.view).y // ドラッグ後の座標 let newDx = touchEvent.location(in: self.view).x let newDy = touchEvent.location(in: self.view).y // ドラッグしたx座標の移動距離 let dx = newDx - preDx print("x:(dx)") // ドラッグしたy座標の移動距離 let dy = newDy - preDy print("y:(dy)") // 画像のフレーム var viewFrame: CGRect = imageLabel.frame // 移動分を反映させる viewFrame.origin.x += dx viewFrame.origin.y += dy imageLabel.frame = viewFrame self.view.addSubview(imageLabel) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func EditText(_ sender: Any) { // < 省略 > } @IBAction func fontSliderAction(_ sender: UISlider) { print(sender.value) imageLabel.font = imageLabel.font.withSize(CGFloat(Int(sender.value))) } @IBAction func Save(_ sender: UIBarButtonItem) { } @IBAction func addButton(_ sender: Any) { // < 省略 > } }
ストーリーボードは以下のような感じです。
補足
Xcode 11.4.1
Development target iOS 12.0
些細なことやアドバイス、記事などでも構いませんので、ご教授よろしくお願いいたします...
[追記 2020/06/06]
コメント欄でご指摘いただいた、self.view.addSubview(imageLabel)
をimageView.addSubview(lblView)
に修正することで、
文字と写真の合成をすることができました。
フォトライブラリ等から取得した画像を保存する際に、
現在はUIImageViewのいらない部分(わかりやすくするために青くしています)も一緒に保存されてしまうので、(以下1枚目の画像)
フォトライブラリ等から取得した段階で、取得した画像にUImageViewの縦横比を合わせるなどの処理をした上で保存したいと思っています。(イメージ画像、以下2枚目のもの)
現在のUIImageViewのサイズ設定は以下の通りです。
今のところ、AutoLayoutはまだ設定していません。
まだ回答がついていません
会員登録して回答してみよう