我有一个名为record的类,它具有录制音频的所有功能,然后我在我的主视图控制器类(RecordViewController)中创建一个名为recordObj的记录类的对象 并通过LongPressGestureRecognizer调用函数,但它给出了错误的访问错误,我也有一些不影响这个代码的firebase代码,这也很好地制作了不同类的核心功能。
import UIKit
import AVFoundation
import Firebase
import FirebaseDatabase
var initialState:Bool=true
class RecordViewController: UIViewController
{
lazy var recordObj = Record()
var users = [User]()
@IBOutlet weak var bControlView: UIView!
@IBOutlet var bRecordButton: UIButton!
@IBOutlet weak var bCancelButton: UIButton!
@IBOutlet weak var bSendButton: UIButton!
@IBOutlet weak var bTimerLabel: UILabel!
//////fuction to make blabPressed Circular/////
func blabPressedCircularStroke()
{
self.bRecordButton.backgroundColor = .clear
self.bRecordButton.layer.cornerRadius = 37
self.bRecordButton.layer.borderWidth = 4
self.bRecordButton.layer.borderColor = UIColor(displayP3Red: 244.0/255.0, green: 178.0/255.0, blue: 70.0/255.0, alpha: 1.0).cgColor
}
fileprivate func fetchBlab() {
let blabAccountByUID=Auth.auth().currentUser?.uid
Database.database().reference().child("Users").child(blabAccountByUID!).observe(.childAdded, with: { (snapshot) in
if let snapshotSaved = snapshot.value as? [String: AnyObject] {
//model being initialised
let user = User(dictionary: snapshotSaved)
user.name = snapshotSaved["name"] as? String
user.number = snapshotSaved["number"] as? String
print("fetch user accessed")
print(snapshotSaved)
user.UID = snapshot.key
self.users.append(user)
print(user.name!, user.number!)
//this will crash because of background thread, so lets use dispatch_async to fix
// DispatchQueue.main.async(execute: {
// RecordCollectionViewController.RecordCollectionView.reloadData()
//
// })
//
}
}, withCancel: nil)
}
//VIEW DID LOAD
override func viewDidLoad()
{
self.blabPressedCircularStroke()
super.viewDidLoad()
fetchBlab()
recordObj.setupRecorder()
let longPress=UILongPressGestureRecognizer(target: self, action:#selector(bRecorderPressed(press:)))
longPress.minimumPressDuration=0
longPress.numberOfTouchesRequired=1
bRecordButton.addGestureRecognizer(longPress)
}
//status bar light
override var preferredStatusBarStyle: UIStatusBarStyle{
return .lightContent
}
//applied function on blab recorder
func bRecorderPressed(press:UILongPressGestureRecognizer)
{
print("brecordbutton long pressed")
switch press.state
{
case .possible:
print("in possible")
recordObj.setupRecorder()
case .began:
print(" in began"); bRecordButton.isHighlighted=true
recordObj.record()
case .ended:
print(" in ended"); bRecordButton.isHighlighted=false
recordObj.pause()
default:
print("long press gesture couldnt complete")
}
}
}
import Foundation
import AVFoundation
class Record:AVAudioRecorder, AVAudioRecorderDelegate{
var soundRecorder : AVAudioRecorder!
var fileName = "audioFile.m4a"
var soundSession:AVAudioSession
override init() {
soundSession=AVAudioSession.sharedInstance()
do
{
try soundSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try soundSession.setActive(true)
}catch
{
let e=NSError()
print("error loading session \(e.localizedDescription)")
}
super.init()
}
func getCacheDirectory() -> String {
let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) as! [String]
return paths[0]
}
func getFileURL() -> URL{
let path = getCacheDirectory()+fileName
let filePath = URL(fileURLWithPath: path)
return filePath
}
func setupRecorder()
{
var recordSettings = [AVFormatIDKey : kAudioFormatAppleLossless,
AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue,
AVEncoderBitRateKey : 320000,
AVNumberOfChannelsKey : 2,
AVSampleRateKey : 44100.0 ] as [String: Any]
do
{
soundRecorder = try AVAudioRecorder(url: getFileURL(), settings: recordSettings )
}
catch
{
var error : NSError?
if let err=error
{
NSLog("Something Wrong")
print(err.localizedDescription)
}
else
{
soundRecorder.delegate = self
soundRecorder.prepareToRecord()
}
}
}
}