Swiftについて教えてください

このQ&Aのポイント
  • SwiftでAVFoundationを使ってカメラを起動し、画面上にSCNViewを重ねたいがうまく表示されない
  • 参考になるサイトを調べても問題が解決しない
  • どのようにすればSCNViewをオーバーレイさせることができるか教えてほしい
回答を見る
  • ベストアンサー

Swiftについて教えてください

AVFoundationでカメラの起動し、その上にSCNViewを重ねようとしています。シングルビューアプリケーションを選択し、UIViewを一つおきそのクラスをSCNViewにして、下記のようにしたのですがSCNViewが表示されません。 http://dev.classmethod.jp/smartphone/ios-camera-intro/ http://tokyo.supersoftware.co.jp/code/1388 http://www.musicalgeometry.com/?p=1273 など調べてみたのですが、解決にいたりませんでした。 SCNViewをオーバーレイさせたいのですが、どのようにすればいいでか?教えてください。 カメラの起動部分は以下のサイトを参考にさせていただきました。 https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/3-avfoundation/002-kamerano-qi-dongto-hua-xiangno-bao-cun カメラを起動し//--------------------------------------------------------------------------ではさまれた部分を追加しました。 import UIKit import AVFoundation import QuartzCore import SceneKit class ViewController: UIViewController { //-------------------------------------------------------------------------- // @IBOutlet weak var OverlayView: SCNView! // var cameraNode:SCNNode! //-------------------------------------------------------------------------- // セッション. var mySession : AVCaptureSession! // デバイス. var myDevice : AVCaptureDevice! // 画像のアウトプット. var myImageOutput : AVCaptureStillImageOutput! override func viewDidLoad() { super.viewDidLoad() //-------------------------------------------------------------------------- // let scene = SCNScene() // var ballObj = SCNNode() ballObj.geometry = SCNSphere(radius: 5) ballObj.position = SCNVector3(x: 0, y: 50, z: -30) scene.rootNode.addChildNode(ballObj) // let scnView = OverlayView as SCNView scnView.scene = scene //背景を透明に scnView.backgroundColor = UIColor(white:1, alpha:0) //カメラ cameraNode = SCNNode() cameraNode.camera = SCNCamera() cameraNode.position = SCNVector3(x: 0, y: 0, z: 0) scene.rootNode.addChildNode(cameraNode) //ライト let lightNode = SCNNode() lightNode.light = SCNLight() lightNode.light!.type = SCNLightTypeOmni lightNode.position = SCNVector3(x: 0, y: 10, z: 10) scene.rootNode.addChildNode(lightNode) //環境光 let ambientlightNode = SCNNode() ambientlightNode.light = SCNLight() ambientlightNode.light!.type = SCNLightTypeAmbient ambientlightNode.light!.color = UIColor.darkGrayColor() scene.rootNode.addChildNode(ambientlightNode) //-------------------------------------------------------------------------- // セッションの作成. mySession = AVCaptureSession() // デバイス一覧の取得. let devices = AVCaptureDevice.devices() // バックカメラをmyDeviceに格納. for device in devices{ if(device.position == AVCaptureDevicePosition.Back){ myDevice = device as! AVCaptureDevice } } // バックカメラからVideoInputを取得. let videoInput = AVCaptureDeviceInput.deviceInputWithDevice(myDevice, error: nil) as! AVCaptureDeviceInput // セッションに追加. mySession.addInput(videoInput) // 出力先を生成. myImageOutput = AVCaptureStillImageOutput() // セッションに追加. mySession.addOutput(myImageOutput) // 画像を表示するレイヤーを生成. let myVideoLayer : AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.layerWithSession(mySession) as! AVCaptureVideoPreviewLayer myVideoLayer.frame = self.view.bounds myVideoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill // Viewに追加. self.view.layer.addSublayer(myVideoLayer) // セッション開始. mySession.startRunning() } }

  • dkong
  • お礼率86% (170/197)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

self.view.layer.addSublayer(myVideoLayer) で、self.viewの最上位にビデオレイヤーを乗せているので、 オーバーレイしたい画像がそのレイヤーの下に隠れているのだと思います。 ビデオレイヤーを乗せるためのUIViewをStoryboardで追加して以下のように定義し、 @IBOutlet weak var videoView: UIView! videoViewの上にOverlayViewが重なるようstoryboardでビューの並びを調整し、 self.view.layer.addSublayer(myVideoLayer) ではなく videoView.layer.addSublayer(myVideoLayer) とすれば、オーバーレイしたい画像がビデオの上に乗ると思います。 それと、カメラノードの座標指定 cameraNode.position = SCNVector3(x: 0, y: 0, z: 0) の部分は、 球体の座標が ballObj.position = SCNVector3(x: 0, y: 50, z: -30) となっているので、 cameraNode.position = SCNVector3(x: 0, y: 50, z: 0) のようにとしないと、たぶんうまく球体が見えないと思います。

dkong
質問者

お礼

ありがとうございました。 丁寧な回答で助かります。思っているようになりました。

関連するQ&A

  • Swiftについて教えてください

    UICollectionviewに読み込んだ画像をタッチして枠線と番号を表示させようと下記のようにしてみたのですが、最後のセルにだけラベルの番号が表示されます。(枠を消したら数字も減ります)各セルにはラベルはきちんと配置されています。それをnumLabel.hidden = trueで消しておいて、セルをタッチした時にnumLabel.hidden = falseで表示させようとし考えています。なぜ最後のセルだけなのでしょうか。教えてください。よろしくお願いします。 import UIKit class ViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate{ //画像を格納する配列 var imageArray:[UIImage] = [] //番号ラベル let numLabel: UILabel = UILabel(frame: CGRectMake(0,0,30,30)) //選択したIndexPath格納する配列 var selection: [NSIndexPath] = [] //コレクションビュー @ IBOutlet weak var imageCollection:UICollectionView? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //配列imageArrayに1~6.pngの画像データを格納 for i in 1...6{ imageArray.append(UIImage(named: "\(i).png")!) } } //コレクションビューのアイテム数を設定 func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { //戻り値にimageArrayの要素数を設定 return imageArray.count } //コレクションビューのセルを設定 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { //繰り返し使用することができるUICollectionViewCellのインスタンスを作成 var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UICollectionViewCell //セルのなかの画像を表示するImageViewのタグを指定 let imageView = cell.viewWithTag(1) as! UIImageView //セルの中のImage Viewに配列の中の画像データを表示 imageView.image = imageArray[indexPath.row]   //ラベルの設定 // 背景を青色にする. numLabel.backgroundColor = UIColor.blueColor() // 文字の色を白にする. numLabel.textColor = UIColor.whiteColor() //文字サイズ numLabel.font = UIFont.systemFontOfSize(12); // Textを中央寄せにする. numLabel.textAlignment = NSTextAlignment.Center //ラベルを非表示にする numLabel.hidden = true //セルにラベルを配置 cell.addSubview(numLabel) //設定したセルを戻り値にする return cell } //セルをタップしたとき func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { let cell = collectionView.cellForItemAtIndexPath(indexPath)! if let index = find(selection, indexPath) { selection.removeAtIndex(index) } else { selection.append(indexPath) } // 可視状態のセルを全て更新する collectionView.visibleCells().map({(cell: AnyObject) -> Void in self.updateCell(cell as! UICollectionViewCell) }) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //セルの更新 func updateCell(cell: UICollectionViewCell) { if let indexPath = self.imageCollection?.indexPathForCell(cell){ if let index = find(selection, indexPath) { cell.contentView.layer.borderColor = UIColor.blueColor().CGColor cell.contentView.layer.borderWidth = 4.0 numLabel.hidden = false numLabel.text = "\(index+1)" } else { cell.contentView.layer.borderColor = UIColor.clearColor().CGColor cell.contentView.layer.borderWidth = 0.0 numLabel.hidden = true } } } }

    • ベストアンサー
    • Swift
  • swiftのsprite kitで質問です(2)

    続きです。 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch: AnyObject in touches { let location = touch.locationInNode(self) let midX = CGRectGetMidX(self.frame) let midY = CGRectGetMidY(self.frame) let area2 = (location.x - midX) / (location.y - (midY - (midY / 5.0))) if location.y > midY - (midY / 5.0) { if area2 >= -1 && area2 <= 1 { let area1 = ((location.x - midX) / (location.y - midY)) if location.y - midY <= 0 && location.x - midX <= 0 { print("left") } else if location.y - midY < 0 && location.x - midX > 0 { print("right") } else if area1 < -0.3 { print("left") } else if area1 >= -0.3 && area1 <= 0.3 { print("center") } else if area1 > 0.3 { print("right") } myImage.position = location var position = CGPointZero position = self.convertPointFromView((touches.first?.locationInView(view))!) let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, position.x, position.y) //CGPathAddCurveToPoint(path, nil, position.x , position.y , midX, midY, midX, midY) if let theNode = self.childNodeWithName("curve") { theNode.removeFromParent() } let shapeNode = SKShapeNode(path: path) shapeNode.name = "curve" self.addChild(shapeNode) } } } } //打球種 SegmentedControlの値が変わったときに呼び出される. func segconChanged1(segcon: UISegmentedControl){ let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, position.x, position.y) let midX = CGRectGetMidX(self.frame) let midY = CGRectGetMidY(self.frame) guard let shapeNode = childNodeWithName("curve") as? SKShapeNode else { return } switch segcon.selectedSegmentIndex { case 0: CGPathAddCurveToPoint(path, nil, position.x , position.y , midX, midY, midX, midY) case 1: CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , position.y , midX, midY, midX, midY) case 2: CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , (position.y + (midY / 1.5)), midX, midY, midX, midY) default: print("Error") } shapeNode.lineWidth = 1.0 } //結果 SegmentedControlの値が変わったときに呼び出される. func segconChanged(segcon: UISegmentedControl){ // shapeNodeを取得 guard let shapeNode = childNodeWithName("curve") as? SKShapeNode else { return } switch segcon.selectedSegmentIndex { case 0: shapeNode.strokeColor = UIColor.redColor() case (1...4): shapeNode.strokeColor = UIColor.greenColor() case (5...6): shapeNode.strokeColor = UIColor.yellowColor() default: print("Error") } shapeNode.lineWidth = 1.0 } } 以上、よろしくお願いします。

  • swiftのsprite kitで質問です(1)

    当方、swift初心者です。 sprite kitで野球のアプリを作っています。 バッターが打った打球の軌跡をSKShapeNodeを使って、 ゴロ  → 直線 ライナー→ ゆるい曲線 フライ → 強い曲線 を表示したいと思っています。 下記は、一番最初にボールを画面の中心に表示しておき、 打球の到達地点をタップするとそこにボールが移動 打球種のUISegmentedControlをタップすると、直線・ゆるい曲線・強い曲線を表示 結果のUISegmentedControlをタップすると、その軌跡の色が、赤・緑・黄に変わる というものです。 結果のUISegmentedControlは出来上がったのですが、打球種のUISegmentedControlが表示できません。 どなたか詳しい方がいらっしゃれば、ご教授いただけないでしょうか? import SpriteKit class GameScene: SKScene { var myImage : SKSpriteNode! override func didMoveToView(view: SKView) { //背景画像 let backGround = SKSpriteNode(imageNamed:"stadium414736.png") let Label = SKLabelNode(text: "\(self.size)") Label.position = CGPointMake(self.size.width/2.0,self.size.height/2.0) backGround.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) backGround.size = self.size backGround.zPosition = -CGFloat.infinity self.addChild(backGround) self.backgroundColor = UIColor.blueColor() myImage = SKSpriteNode(imageNamed:"ball04.png") myImage.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)); self.addChild(myImage) // ラベル 打球種 let dakyuushu = SKLabelNode(fontNamed:"Chalkduster") dakyuushu.text = "打球種" dakyuushu.fontSize = 15 dakyuushu.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 11.1) dakyuushu.fontColor = UIColor.whiteColor() self.addChild(dakyuushu) //選択肢 let myArray1: NSArray = [" ゴロ ", " ライナー ", " フライ " ] // SegmentedControlを作成する. let dakyuushu1: UISegmentedControl = UISegmentedControl(items: myArray1 as [AnyObject]) dakyuushu1.center = CGPoint(x:(size.width / 10.0) * 5.8 , y:(size.height / 35) * 23.5) dakyuushu1.tintColor = UIColor.yellowColor() dakyuushu1.addTarget(self, action: "segconChanged1:", forControlEvents: UIControlEvents.ValueChanged) self.view!.addSubview(dakyuushu1) // ラベル 結果 let kekka = SKLabelNode() kekka.text = "結果" kekka.fontSize = 15 kekka.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 5.5) kekka.fontColor = UIColor.whiteColor() self.addChild(kekka) //選択肢 let myArray: NSArray = ["Out ", "1BH ", "2BH ", "3BH ","HR ", "ERR ", "Fc " ] // SegmentedControlを作成する. let kekka1: UISegmentedControl = UISegmentedControl(items: myArray as [AnyObject]) kekka1.center = CGPoint(x:(size.width / 10.0) * 5 , y:(size.height / 35) * 31) kekka1.tintColor = UIColor.yellowColor() kekka1.addTarget(self, action: "segconChanged:", forControlEvents: UIControlEvents.ValueChanged) self.view!.addSubview(kekka1) } 長文なので、続きます。

  • Swiftについて教えてください

    カメラロールにある写真をUICollectionViewに読み込み表示させようと思い、いろいろ調べながら下記のようにしてみたのですが、表示されません。swiftでALAssetをUICollectionViewで表示させるなどのやり方を調べてみたのですが、わかりませんでした。(英語のサイトなどにあったかもしれませんが…)swiftでALAssetをUICollectionViewで表示させかた教えてください。 import UIKit import AssetsLibrary class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { var assets : NSMutableArray = [] var groups = ALAssetsGroup() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.groups.enumerateAssetsUsingBlock({ (asset: ALAsset!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in if asset != nil { self.assets.insertObject(asset!, atIndex: 0) } }) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return self.assets.count; } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)as! UICollectionViewCell let asset :ALAsset = self.assets[indexPath.item] as! ALAsset; (cell.viewWithTag(1) as! UIImageView).image = UIImage(CGImage: asset.thumbnail().takeUnretainedValue()) return cell }

    • ベストアンサー
    • Swift
  • Swiftについて教えてください

    Swiftで分からないことがあり、投稿させていただきました。UIImageViewにタッチの機能をつけてlet stamp = Timage()で呼び出しているサンプルを参考にタッチをピンチジェスチャーに変更してlet stamp = Pimage()で呼び出すと Missing argument for parameter 'coder' in callというエラーがでます。調べて呼び出し文で引数が足りない。ということが分かったのですが、どのようにして呼び出したらいいのかわかりません。Swift初心者なので、具体的に教えていただければありがたいです。よろしくお願いします。 タッチ//////////////////////////////////////////////////////////////////////////////////////////////////////////// import UIKit class Timage: UIImageView { override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { self.superview?.bringSubviewToFront(self) } override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { let touch = touches.first as! UITouch let dx = touch.locationInView(self.superview).x - touch.previousLocationInView(self.superview).x let dy = touch.locationInView(self.superview).y - touch.previousLocationInView(self.superview).y self.center = CGPointMake(self.center.x + dx, self.center.y + dy) } } ピンチジェスチャー/////////////////////////////////////////////////////////////////////////////////////////////////////////////// import UIKit class Pimage: UIImageView { var gestureEnabled = true private var beforePoint = CGPointMake(0.0, 0.0) private var currentScale:CGFloat = 1.0 required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.userInteractionEnabled = true let pinchGesture = UIPinchGestureRecognizer(target: self, action: "Pinch") self.addGestureRecognizer(pinchGesture) } }

    • ベストアンサー
    • Swift
  • Swiftについて教えてください

    viewのタップを検知したいと思い以下のようにし、ビルドには成功するのですが、シミュレーターでクリックすると落ちてしまいます。terminating with uncaught exception of type NSExceptionと表示されるので、これで検索したのですが、解決に至りませんでした。 回答よろしくお願いします。swift 1.2です。 import UIKit class ViewController: UIViewController,UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. /* シングルタップ */ let tapGesture = UITapGestureRecognizer(target: self, action: "myView_Tapped:") // デリゲートをセット tapGesture.delegate = self // ビューにジェスチャーを追加 self.view.addGestureRecognizer(tapGesture) func myView_Tapped(sender: UITapGestureRecognizer){ // 処理 println("タップ") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

    • ベストアンサー
    • Swift
  • Swiftについて教えてください

    カメラロールの写真を取得する下記の関数を作ってみたのですが、写真が90度回転されて読み込まれてしまうので、 http://blog.kitoko552.com/entry/20151213/1450008748 http://yutakaseda3216.hatenablog.com/entry/2016/01/14/132300 http://qiita.com/FGtatsuro/items/57be765cba2bf576a8d9 http://ameblo.jp/ladycosmos/entry-11789597326.html などを調べてみたのですが解決できませんでした。 UIImage(CGImage:   ,scale:      ,orientation:     )の引数などがよく分かっていません。また、aseetから向きやサイズの取得の仕方など教えてください。よろしくお願いします。 aseetArrayはaseetを読み込んだ配列です。 func getUIImage(index :Int)->UIImage { let asset:ALAsset = aseetArray[index] as! ALAsset; var assetRep: ALAssetRepresentation = asset.defaultRepresentation() var iref = assetRep.fullResolutionImage().takeUnretainedValue() var image = UIImage(CGImage:     ,scale:     ,orientation:      )   return image! }

    • ベストアンサー
    • Swift
  • swift言語 Xcode

    アプリを作る勉強をしています。参考書通りやりましたが、警告が出てしまいます。 原因がわからず困っています。どなたか助けて頂けませんでしょうか?宜しくお願い致します。 ソースはこちらです。 import UIKit import MapKit class ViewController: UIViewController ,UITextFieldDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. inputText.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var inputText: UITextField! @IBOutlet weak var dispMap: MKMapView! } func textFildShoouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let searchKeyword = textField.text print(searchKeyword) ⇦ここに警告が出ます。 return true

  • swiftでストップウォッチに計算機能を追加

    swiftでストップウォッチアプリを作りました。 そのアプリに以下の機能を追加しようと思います。 一つの作業が完了するまでの時間(秒)を計測した上で、 その時間をもとに1時間あたりではいくつの作業が完了するのか、 計算して画面に表示させる機能。 (計算式:3600 / 計測した秒数 = 1時間あたりの作業数) どのように書けば、上記のような機能を追加できるでしょうか? 現状のソースコードは以下のようになります。 import UIKit class ViewController: UIViewController { @IBOutlet weak var timerLabel: UILabel! @IBOutlet weak var startButton: UIButton! @IBOutlet weak var stopButton: UIButton! @IBOutlet weak var resetButton: UIButton! @IBOutlet weak var page: UILabel! var startTime: NSTimeInterval? = nil var timer: NSTimer? var elapsedTime: Double = 0.0 override func viewDidLoad() { super.viewDidLoad() setButtonEnabled(true, stop: false, reset: false) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func setButtonEnabled(start:Bool, stop:Bool, reset:Bool) { self.startButton.enabled = start self.stopButton.enabled = stop self.resetButton.enabled = reset } func update() { if let t = self.startTime { let time: Double = NSDate.timeIntervalSinceReferenceDate() - t + self.elapsedTime let sec: Int = Int(time) let msec: Int = Int((time - Double(sec)) * 100.0) self.timerLabel.text = NSString(format: "%02d:%02d:%02d", sec/60, sec%60, msec) as String } } @IBAction func startTimer(sender: AnyObject) { setButtonEnabled(false, stop: true, reset: false) self.startTime = NSDate.timeIntervalSinceReferenceDate() // 2001/1/1 0:0:0 self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true) } @IBAction func stopTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: true) if let t = self.startTime { self.elapsedTime += NSDate.timeIntervalSinceReferenceDate() - t self.timer?.invalidate() self.timer = nil } } @IBAction func resetTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: false) self.elapsedTime = 0.0 self.startTime = nil self.timerLabel.text = "00:00:00" } }

    • ベストアンサー
    • Swift
  • swiftでOCRを利用したサンプルコードを書いて

    http://blog.isana.net/2014/08/ios.html 上記サイトを参考にobjective-Cをswiftに書き換えているのですが、どうしてもエラーが取れない場所があり、困っています。以下に記述するので、回答をお願いします。 import UIKit class ViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var Textview: UITextView! @IBOutlet weak var Imageview: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func Camera(sender: AnyObject) { var imagePickerController: UIImagePickerController = UIImagePickerController() //デリゲート指定 imagePickerController.delegate = self //トリミング指定 imagePickerController.allowsEditing = true //カメラの有無確認 if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear){ //カメラ指定 imagePickerController.sourceType = .Camera } else { //アルバム指定 imagePickerController.sourceType = .SavedPhotosAlbum } //コントローラ起動 self.presentViewController(imagePickerController, animated: true, completion: nil) } func ImagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { /*ここから //イメージをメモリに保存 var selectedImage:UIImage self.selectedImage = info objectForKey:UIImagePickerControllerEditedImage //イメージビューに画像をセット self.Imageview.image = self.selectedImage ここ*/ //親ビューに戻る self.dismissViewControllerAnimated(true, completion: nil) //テキストを空に self.Textview.text = nil //インジケータ開始 var spinner: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) spinner.center = CGPointMake(160, 240) spinner.hidesWhenStopped = true view.addSubview(spinner) spinner.startAnimating() //OCR実行 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { var tesseract: Tesseract = Tesseract(language: "eng") tesseract.image = selectedImage tesseract.recognize() dispatch_async(dispatch_get_main_queue(), { self.Textview.text = tesseract.recognizedText spinner.stopAnimating() }) }) } } コメントアウトで示した部分の書き換えがどうしてもわからないです。 また、エラーが出てないだけでうまく動作がしないと思われる部分があれば、教えていただけると助かります。 回答宜しくお願いします。

専門家に質問してみよう