撮影中の画像にフォトフレームをオーバーレイする、という話であれば、UIImagePickerController
の cameraOverlayView
プロパティに適切なビューをセットすれば使えます(一応動作は確認しました)。
ネット上の情報はかなり古いものも多く、Objective-Cで記述されたものもかなりありますが、Swiftでの記述は割合そのまま使えますのでどうにかなると思います。
ただし、そのまま重ねても座標がずれてしまいますから、フォトフレームの幅や高さ、表示される画像の中心点とフレームの中心点をそろえる計算や処理が必要です。
ちょっと試した感じだとこんな感じでオーバーレイできます。
カメラ画像と一致させるいいアイデアがないのが悔しいところですが...
最初の回答:
撮影した画像にフレームをかさねるのであれば、こんな感じでできそうです。
swift
1 let frameView = UIImageView(image: frameImg)
2 let baseView = UIImageView(image: baseImg)
3
4 // ベースイメージのサイズをフレームに合わせる
5 baseView.frame.size = frameView.frame.size
6
7 UIGraphicsBeginImageContext(frameImg.size)
8
9 let context = UIGraphicsGetCurrentContext()!
10 baseView.layer.render(in: context)
11 frameView.layer.render(in: context)
12
13 let capturedImage = UIGraphicsGetImageFromCurrentImageContext()!
14
15 UIGraphicsEndImageContext()
キーワードとしては、まずはUIGraphicsBeginImageContext
で調べ始めるのがいいと思います(わたしはそうしました)。
フレーム画像は透過PNG画像を使っています(透過画像を使わないとうまく重ならないと思います)。
上の例では、ベースイメージ(フレームを重ねたい画像)のサイズをフレームのサイズに強引に合わせていますが、実際はもっと適切な処理や、場合によってはクロップ(切り取り)やピンチイン・アウトによる拡大縮小なども必要になるかもしれません。
処理が甘いところがありますが、実行例はこんな感じになります。
上から順番にベースイメージ、フレームのイメージ、合成後の画像です(ちなみに、画像は手持ちの画像とフリー素材を使っています)。