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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

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

Q&A

1回答

1574閲覧

[swift2] NSTimerを使ったプログラムについて

mottyan23

総合スコア13

Swift

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

0グッド

0クリップ

投稿2015/12/22 09:07

###前提・実現したいこと
NSTimerを使って指定時間ごとに写真を撮影したい。
###発生している問題・エラーメッセージ
NSTimerを含むプログラムをどこに配置したらいいかわかりません。
###ソースコード

swift

1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController { 5 6 // 画像のアウトプット 7 var myImageOutput:AVCaptureStillImageOutput! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // セッションの作成 12 let mySession = AVCaptureSession() 13 //解像度の指定 14 mySession.sessionPreset = AVCaptureSessionPresetLow 15 16 // 撮影に使うカメラ 17 var myCamera:AVCaptureDevice! 18 //デバイス一覧の取得 19 let devices = AVCaptureDevice.devices() 20 for device in devices{ 21 // フロントカメラで撮影する 22 if(device.position == AVCaptureDevicePosition.Front){ 23 myCamera = device as! AVCaptureDevice 24 } 25 26 } 27 28 29 // カメラからVideoInputを取得する 30 do { 31 // 入力元 32 let videoInput = try AVCaptureDeviceInput(device: myCamera) 33 mySession.addInput(videoInput) 34 35 // 出力先 36 myImageOutput = AVCaptureStillImageOutput() 37 mySession.addOutput(myImageOutput) 38 39 // 画像を表示するプレビューレイヤを作る 40 let myVideoLayer = AVCaptureVideoPreviewLayer(session: mySession) 41 myVideoLayer.frame = view.bounds 42 myVideoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 43 // 最背面になるようにプレビューレイヤを挿入する 44 view.layer.insertSublayer(myVideoLayer, atIndex: 0) 45 46 // セッション開始 47 mySession.startRunning() 48 49 } catch let error as NSError { 50 print("カメラは使えません。\(error)") 51 } 52 } 53 54 // 指定秒ごとに実行する 55 func takePhoto(sender: AnyObject) { 56 // ビデオ出力に接続する 57 let myAVConnection = myImageOutput.connectionWithMediaType(AVMediaTypeVideo) 58 59 // 接続から画像を取得する 60 myImageOutput.captureStillImageAsynchronouslyFromConnection(myAVConnection, completionHandler: { (imageDataBuffer, error) -> Void in 61 // ビデオ画像をキャプチャする 62 let myImageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer) 63 let stillImage = UIImage(data: myImageData) 64 65 // カメラロールに追加する 66 UIImageWriteToSavedPhotosAlbum(stillImage!, self, nil, nil) 67 }) 68 } 69 70}

上記プログラムにしたのプログラムを追加したいと考えています。

swift

1NSTimer.scheduledTimeWithTimeInterval( 2 3.0, 3 target:self, 4 selector: Selector("takePhoto"), 5 userInfo: nil, 6 repeats: true 7) 8

###補足情報(言語/FW/ツール等のバージョンなど)
swift2を使用していて、Xcodeのバージョンも最新の物を使用しています。
ほぼ全くの初心者ですが色々作っていきたいと思っているので、ご助力下さい。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

普通ならボタンを押したら開始とかでしょうけど単純に画面が出たらすぐ開始でいいなら
viewDidAppearが画面が表示された時に呼ばれるのでいいと思います。

ちなみに、止めるタイミングはviewWillDisappearがいいかと思います。
画面が非表示になる直前に呼ばれます。

投稿2015/12/22 10:28

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mottyan23

2016/01/06 06:38

返信が遅れてすみません。 回答の方、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問