關於錄音按鈕的一些總結
關於錄音按鈕的一些總結
按住錄音, 上滑松手取消, 上滑不松下滑到按鈕上繼續錄音
這個需求總結了一下網上的思路, 大概有如下幾種
- 在 touchesBegan, touchesMoved, touchesEnded 三個方法中通過判斷當前觸摸的點的坐標與按鈕的熱區范圍的關系作出相應反應
- 添加長按手勢, 對手勢的 gestureRecognizerStaeBegin, changed, ended 三種狀態判斷此時手指位置與按鈕關系, 從而有不同反應.
- 對按鈕的所有幾種點擊事件進行不同處理, touchUpInside, touchDown, touchUpOutside, touchCancel, touchDragExit, touchDragEnter, 主要是為這六個點擊事件綁定方法進行監聽, 至於每種方法做什么的從名字上還是很簡單能夠分辨的
大致優劣比較
- 三個方法只需要重寫就可以了, 不需要再去多聲明額外的方法, 簡單. 但是如果當前頁面有其他touch 監聽, 容易混淆.
- 跟第一種區別其實不大, 而且API 也已經提供好, 只需要在不同狀態下進行處理就可以了, 但是很容易與當前頁面的其他手勢沖突.
- 最精細的一種方法, 只會與按鈕本身有交互, 不會涉及到其他控件. 但是需要監聽6個按鈕響應事件, 要實現6個額外的方法.比較麻煩.
獲取錄音的當前時間
設置 meteringEnabled 屬性即可.
獲取當前錄音音量
1 recoder.updateMeters() 2 recorder.averagePowerForChannel //平均值 3 recorder.peakPowerForChannel //最大值
錄音器的設定參數
1 recorderSettingDic = 2 [ 3 AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC), 4 AVNumberOfChannelsKey: 2, //錄音的聲道數,立體聲為雙聲道 5 AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue, 6 AVEncoderBitRateKey : 320000, 7 AVSampleRateKey : 44100.0 //錄音器每秒采集的錄音樣本數 8 ]
額外需要注意的部分
在dealloc 方法或者 deinit 方法中最好 recorder = nil
, player = nil
(如果有播放錄音的話)