カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

カメラで写真を撮影する AVFoundation

今回はシステムのカメラUIImagePickerControllerではなくAVFoundationフレームワークを
使った方法をご紹介します。
簡単に実装するならUIImagePickerControllerが楽ですが、AVFoundationのほうが柔軟なアプリの作成が可能になります。

ネット上でも様々な情報がありますが、今回の肝になるのがデバイスの向きと
撮影した写真の向きの問題です。
例えば、iPhoneのみ対応のアプリで縦画面(portrait)に完全固定であれば
そう難しくないのですが、私が作ろうとしていたのが、iPhoneでは縦固定、iPadでは横固定で、
且つNavigationControllerを使用していたため、結構頭を悩ませました。

NavigationControllerを使っていると、カメラのシーンだけ縦に固定することができないのです。
通常はViewControllerに対してshouldAutorotateをoverrideすれば特定のシーンのみ
固定することが可能なのですが、NavigationControllerを使用している場合、
ViewControllerはNavigationControllerに包括されているのでViewControllerのshouldAutorotateをoverrideしても効果がないのです。
そしてその場合はNavigationControllerのshouldAutorotateをoverrideすることになりますが、
そうしてしまうと包括されている全てのシーンに適用されてしまいます。

また、iPhoneのみ対応で縦画面固定だったとしても、適切に処理していないと、
“最初から端末を横にして”カメラを起動すると写真が横にならないという事態になってしまいます。
これは私が参考にさせて頂いた書籍でもそこまでは対応していませんでした。

今回、意識するポイントとしては2種類、それぞれ3つあります。

まず1つ目

  • デバイスの向き
  • プレビューの向き
  • 保存時の出力の向き

これはiPhoneでは縦、iPadでは横とする場合のポイントです。

次に2つ目

  • インターフェースの向き
  • プレビューの向き
  • レイヤーの向き

これは画面の回転に対応する場合に気を付けるポイントです。

それでは、以上を踏まえた上で先に進みましょう。
まずはiPhoneでは縦固定、iPadでは横固定の場合で作成します。

カメラ利用の許可

まずはカメラを利用するためInfo.plistにカメラの利用許可を追加します。
また、写真を撮影するということは保存するためにフォトライブラリーにアクセスしますので、
そちらも一緒に追加します。

Privacy - Camera Usage Description
Privacy - Photo Library Usage Description

Valueには「写真を撮影します。」「写真を保存します。」等と設定します。
続きを読む…»

8,021 views

カメラで写真を撮影する UIImagePickerController

システムのカメラ機能を使って写真を撮影します。
特に考えることなく、簡単に実装できますので試してみてください。

簡単に実装できますが、カスタマイズすることができないので、
カスタマイズしたい方はAVFoundationを利用してください。

カメラ利用の許可

まずはカメラを利用するためInfo.plistにカメラの利用許可を追加します。
また、写真を撮影するということは保存するためにフォトライブラリーにアクセスしますので、そちらも一緒に追加します。

Privacy - Camera Usage Description
Privacy - Photo Library Usage Description

Valueには「写真を撮影します。」「写真を保存します。」等と設定します。

デリゲート

UIImagePickerControllerDelegateとUINavigationControllerDelegateを設定します。
後者が必要なのはUIImagePickerControllerの親クラスがUINavigationControllerのためです。

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

Viewの配置

StoryBoardでViewControllerにViewと、カメラ起動と保存ボタンの2つのButtonを配置します。

配置したViewを「previewView」としてOutlet接続します。

@IBOutlet weak var previewView: UIView!

続きを読む…»

2,565 views

ブラウザで指定したURLを開く

外部ブラウザ(Safari)で指定したURLを開く方法のご紹介です。

URLを指定します。

let url = URL(string: "http://~")

ブラウザを起動

UIApplication.shared.open(url!)

サードパーティ製ブラウザで開く場合は、URLスキームを変えてやる必要があります。
※現状での動作は確認していますが、各アプリの変更によってスキームが変更になる可能性はあります。

Google Chromeの場合
こちらの場合、httpは省きます。

let url = URL(string: "googlechrome://~")

Firefoxの場合

let url = URL(string: "firefox://open-url?url=http://~")

Operaの場合

let url = URL(string: "opera-http://~")

Xcode: 8.3.2
Swift: 3.1
OS: Sierra 10.12

5,377 views

Swift3 クリップボードにテキストをコピー

クリップボードにテキストをコピーします。

let board = UIPasteboard.general
board.setValue("text", forPasteboardType: "public.text")

Xcode: 8.3.2
Swift: 3.1
OS: Sierra 10.12

1,587 views

Swift3 システム効果音を鳴らす

鐘やトライトーン等の効果音を簡単に鳴らすことができます。

import AudioToolbox
let soundIdRing: SystemSoundID = 1000 //鐘
AudioServicesPlaySystemSound(soundIdRing)
サウンドIDの抜粋
ID
1000
1001 スウォッシュ
1002 トライトーン
1003 SMSメッセージ受信音
1004 SMSメッセージ送信音
1005 通知
1006 充電残量低下音
1007 トライトーン
1008 チャイム
1009 ガラス
1010 ホーン

その他IDはこちらをご参照ください。
http://iphonedevwiki.net/index.php/AudioServices

Xcode: 8.3.2
Swift: 3.1
OS: Sierra 10.12

6,704 views