我在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的新手,所以可能会离开。
感谢您的耐心和帮助!