通过UIImagePickerController选择图像后,工具栏中没有任何IBAction工作

时间:2016-03-02 20:43:25

标签: ios swift uiimagepickercontroller

我在xCode 7中使用Swift 2.构建单个视图应用。我尝试做的是允许用户访问他们的照片库,选择图像,然后录制一些音频。

我为所选照片的​​位置设置了一个UIImageView视图,然后设置了一个带有三个UIBarButtonItems的UIToolbar:Image,Record,Play。点击'图片'将调出用户的照片库以从中挑选照片。

这是我的代码:

import UIKit
import AVFoundation

class ViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet var imageView: UIImageView!
    @IBOutlet var imgSlctBtn: UIBarButtonItem!
    @IBOutlet var recordBtn: UIBarButtonItem!
    @IBOutlet var playBtn: UIBarButtonItem!
    @IBOutlet var toolbar: UIToolbar!

    var soundRecorder : AVAudioRecorder!
    var soundPlayer : AVAudioPlayer!
    var fileName = "micFlagRecording"
    var imagePicker = UIImagePickerController()
    var newFileName = ""
    let userDefaults = NSUserDefaults.standardUserDefaults()

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        dismissViewControllerAnimated(true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            imageView.contentMode = .ScaleAspectFit
            imageView.image = pickedImage
        }
        dismissViewControllerAnimated(true, completion: nil)
    }

    func getCacheDirectory() -> String {
    . . . 
    }

    func saveFileReference() {
    . . .
    }

    func newFileURL() -> NSURL {
    . . .
    }

    func getFileURL() -> NSURL {
    . . .  
    }

    func setupRecorder() {
    . . .    
    }

    func preparePlayer() {
    . . .    
    }

    @IBAction func record(sender: UIBarButtonItem) {
        print("record started")
        if sender.title == "Record" {
            soundRecorder.record()
            recordBtn.title = "Stop"
        } else {
            soundRecorder.stop()
            recordBtn.title = "Record"
            playBtn.enabled = true
        }
    }

    @IBAction func play(sender: UIBarButtonItem) {
        if sender.title == "Play" {
            recordBtn.enabled = false
            sender.title = "Stop"
            preparePlayer()
            soundPlayer.play()
        } else {
            soundPlayer.stop()
            sender.title = "Play"
            recordBtn.enabled = true
        }
    }

    @IBAction func initImgSlct(sender: UIBarButtonItem) {
        imagePicker.allowsEditing = false
        imagePicker.sourceType = .PhotoLibrary
        presentViewController(imagePicker, animated: true, completion: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        playBtn.enabled = false
        imagePicker.delegate = self
        setupRecorder()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

}

当我尝试使用此代码时会发生什么事情,录制和播放工作就好了。但是,在我通过单击"图像"从照片库中选择图像后(调用IBAction函数initImgSlct)UIBarButtonItems仍在点击,但没有触发任何IBAction。

我在想这个问题与我在ImagePickerController上的dismissViewController没有将委托返回给我的ViewController?我是Swift的新手,所以可能会离开。

感谢您的耐心和帮助!

0 个答案:

没有答案