したいこと
UIImageViewで読み込んでいる画像と、その上にあるUILabelを一つの画像として書き出したいです。
試したこと
さまざまな記事など読み、試しましたがあまり良くわからず、結果的に実装できていません。
コード
Swift
1import UIKit 2 3class EditViewController: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate { 4 5 @IBOutlet weak var imageLabel: UILabel! 6 @IBOutlet weak var fontSlider: UISlider! 7 @IBOutlet weak var pictureView: UIImageView! 8 // @IBOutlet weak var OpacitySlider: UISlider! // 不透明度のSlider 今後のUPD対象 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Screen Size の取得 15 let screenWidth:CGFloat = view.frame.size.width 16 let screenHeight:CGFloat = view.frame.size.height 17 18 // Labelのフレームを設定 19 imageLabel.frame = CGRect(x:0, y:0, width:343, height:110) 20 21 // Labelをスクリーン中央に設定 22 imageLabel.center = CGPoint(x:screenWidth/2, y:screenHeight/2) 23 24 // タッチ操作を enable 25 imageLabel.isUserInteractionEnabled = true 26 27 self.view.addSubview(imageLabel) 28 29 30 // Do any additional setup after loading the view. 31 } 32 33 34 35 // 画面にタッチで呼ばれる 36 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 37 print("touchesBegan") 38 39 } 40 41 // ドラッグ時に呼ばれる 42 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 43 // タッチイベントを取得 44 let touchEvent = touches.first! 45 46 // ドラッグ前の座標, Swift 1.2 から 47 let preDx = touchEvent.previousLocation(in: self.view).x 48 let preDy = touchEvent.previousLocation(in: self.view).y 49 50 // ドラッグ後の座標 51 let newDx = touchEvent.location(in: self.view).x 52 let newDy = touchEvent.location(in: self.view).y 53 54 // ドラッグしたx座標の移動距離 55 let dx = newDx - preDx 56 print("x:(dx)") 57 58 // ドラッグしたy座標の移動距離 59 let dy = newDy - preDy 60 print("y:(dy)") 61 62 // 画像のフレーム 63 var viewFrame: CGRect = imageLabel.frame 64 65 // 移動分を反映させる 66 viewFrame.origin.x += dx 67 viewFrame.origin.y += dy 68 69 imageLabel.frame = viewFrame 70 71 self.view.addSubview(imageLabel) 72 } 73 74 override func didReceiveMemoryWarning() { 75 super.didReceiveMemoryWarning() 76 } 77 78 79 @IBAction func EditText(_ sender: Any) { 80 81 82 // < 省略 > 83 84 85 } 86 87 @IBAction func fontSliderAction(_ sender: UISlider) { 88 print(sender.value) 89 90 imageLabel.font = imageLabel.font.withSize(CGFloat(Int(sender.value))) 91 92 } 93 94 95 96 97 @IBAction func Save(_ sender: UIBarButtonItem) { 98 99 100 } 101 102 103 104 105 @IBAction func addButton(_ sender: Any) { 106 107 108 // < 省略 > 109 110 } 111 112 113}
補足
Xcode 11.4.1
Development target iOS 12.0
些細なことやアドバイス、記事などでも構いませんので、ご教授よろしくお願いいたします...
[追記 2020/06/06]
コメント欄でご指摘いただいた、self.view.addSubview(imageLabel)
をimageView.addSubview(lblView)
に修正することで、
文字と写真の合成をすることができました。
フォトライブラリ等から取得した画像を保存する際に、
現在はUIImageViewのいらない部分(わかりやすくするために青くしています)も一緒に保存されてしまうので、(以下1枚目の画像)
フォトライブラリ等から取得した段階で、取得した画像にUImageViewの縦横比を合わせるなどの処理をした上で保存したいと思っています。(イメージ画像、以下2枚目のもの)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/07 15:10
2020/05/07 15:27
2020/06/06 13:27
2020/06/07 12:19