質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • Swift

    9165questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1341questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

UIImagePickerControllerのカメラのプレビュー画面にUIImageViewをぴったり重ねたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 835

dd6

score 9

UIImagePickerControllerのカメラで写真を撮影し、次に撮影するときに、前回に撮影した写真を半透明にし、UIImagePickerControllerのカメラの上に重ねてガイドにしたいと思っています。UIImagePickerControllerのカメラのプレビューが横幅いっぱいだったので、前回の写真の横幅をそれに合わせ、同じ比率で縦を計算して、以下のようにしたのですが、うまくいきません。
また、iPhoneを縦に持ち撮影し、各値をprint()で出力してみると、写真の縦と横の値が逆になっているのですが、なぜかよくわかりません。UIImagePickerControllerのカメラのプレビュー画面の上にぴったり重ねる位置の取得する方法がわからないので、重ねる位置は何回か試して決めようかと思っています。
そのやり方では、どのiPhoneやiPadでもできないので、教えて欲しいことが

UIImagePickerControllerのカメラのプレビュー画面のサイズを取得し写真をリサイズする方法
UIImagePickerControllerのカメラのプレビュー画面の上にぴったり重ねる位置の取得の方法
写真の縦と横の値がなぜ逆になるのか、その場合の対処の方法

の3つですよろしくお願いします。

swift3 xcode8.3.3

//写真のサイズを取得(photoAssetはPHAssetデータ)
let photoAssetWidth = Int(photoAsset.pixelWidth)
let photoAssetHeight = Int(photoAsset.pixelHeight)

// Windowの表示領域すべてのサイズ(point)の取得
let myBoundSize: CGSize = UIScreen.main.bounds.size
let boundsWidth = Int(myBoundSize.width)
let boundsHeight = Int(myBoundSize.height)


//写真をリサイズする
let resizeWidth = boundsWidth
let resizeHeight = photoAssetHeight * boundsWidth /  photoAssetWidth


//PHAssetデータからUIImageに作る
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
var photoImage = UIImage()
option.isSynchronous = true
manager.requestImage(for: photoAsset, targetSize: CGSize(width: resizeWidth, height: resizeHeight), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in photoImage = result! })



// UIImageViewのサイズを設定する
let iWidth: CGFloat = CGFloat(boundsWidth)
let iHeight: CGFloat = CGFloat(boundsHeight)

// UIImageViewのx,yを設定する
let posX: CGFloat = (self.view.bounds.width - iWidth)/2
let posY: CGFloat = (self.view.bounds.height - iHeight)/2

// UIImageViewを作成する(var myImageView: UIImageView!で定義してある)
myImageView = UIImageView(frame: CGRect(x: posX, y: posY, width: iWidth, height: iHeight))

// 画像をUIImageViewに設定する
myImageView.image = photoImage

//UIImageViewを半透明にする
myImageView.alpha = 0.3



// カメラ起動 UIImagePickerControllerのインスタンスの作成
self.cameraPicker.sourceType = self.sourceType
self.cameraPicker.delegate = self
self.present(self.cameraPicker, animated: true, completion: nil)

// UIImageViewをcameraPickerに重ねる.
self.cameraPicker.cameraOverlayView = myImageViewコード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    9165questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1341questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。