iOS 实现长按录音上滑取消的几种思路

body { font-size: 13pt; color: #222; background: #fbfbfb; font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; line-height: 1.4; margin: 10% }
h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111 }
h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; margin-top: 2em }
h2 { font-size: 2em; margin-bottom: 0.75em; margin-top: 1.5em }
h3 { font-size: 1.5em; line-height: 1; margin-top: 1.5em }
h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em }
h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em }
h6 { font-size: 1em; font-weight: bold }
h1 img,h2 img,h3 img,h4 img,h5 img,h6 img { margin: 0 }
img { max-width: 100% }
p { margin: 0 0 1.5em }
a:focus,a:hover { color: #09f }
a { color: #06c; text-decoration: underline }
blockquote { margin: 1.5em; color: #666 }
strong,dfn { font-weight: bold }
em,dfn { font-style: italic }
del { color: #666 }
pre { margin: 1.5em 0; white-space: pre }
pre,code,tt { font: 1em "andale mono", "lucida console", monospace; line-height: 1.5 }
li ul,li ol { margin: 0 }
ul,ol { margin: 0 3em 1.5em 1.5em; padding-left: 1.5em }
ul { list-style-type: disc }
ol { list-style-type: decimal }
figure { margin: 1.5em 0; width: 100%; text-align: center }
figcaption { font-size: 0.75em; padding: 0.5em 2em; margin-bottom: 2em }
figure img { margin-bottom: 0px }
code { font-family: Menlo, monospace; font-size: 90% }
p>code { padding: 0.2em 0.4em; background: #e1e9ed }
pre { text-align: left; color: #d3bd7e; background: #202020; padding: 10pt 15pt }
hr { border: 0px; border-top: 1px solid #ddd; border-bottom: 1px solid #fff; margin-top: 4em; margin-bottom: 2em }
h1+hr { margin-top: 2em }
ol#footnotes { font-size: 0.75em; padding-top: 1.5em; margin-top: 3em; margin-left: 0 }
ol#footnotes::before { content: "———"; letter-spacing: -4px; margin-left: -1.5em }
ol p,ul p { margin-bottom: 0px }
li { margin-bottom: 0.75em; margin-top: 0.75em }
a:target,ol#footnotes li:target,sup a:target { }
a:target { border: 0; outline: 0 }

关于录音按钮的一些总结

关于录音按钮的一些总结

按住录音, 上滑松手取消, 上滑不松下滑到按钮上继续录音

这个需求总结了一下网上的思路, 大概有如下几种

  1. 在 touchesBegan, touchesMoved, touchesEnded 三个方法中通过判断当前触摸的点的坐标与按钮的热区范围的关系作出相应反应
  2. 添加长按手势, 对手势的 gestureRecognizerStaeBegin, changed, ended 三种状态判断此时手指位置与按钮关系, 从而有不同反应.
  3. 对按钮的所有几种点击事件进行不同处理, touchUpInside, touchDown, touchUpOutside, touchCancel, touchDragExit, touchDragEnter, 主要是为这六个点击事件绑定方法进行监听, 至于每种方法做什么的从名字上还是很简单能够分辨的

大致优劣比较

  1. 三个方法只需要重写就可以了, 不需要再去多声明额外的方法, 简单. 但是如果当前页面有其他touch 监听, 容易混淆.
  2. 跟第一种区别其实不大, 而且API 也已经提供好, 只需要在不同状态下进行处理就可以了, 但是很容易与当前页面的其他手势冲突.
  3. 最精细的一种方法, 只会与按钮本身有交互, 不会涉及到其他控件. 但是需要监听6个按钮响应事件, 要实现6个额外的方法.比较麻烦.

获取录音的当前时间

设置 meteringEnabled 属性即可.

获取当前录音音量

recoder.updateMeters()
recorder.averagePowerForChannel //平均值
recorder.peakPowerForChannel //最大值

录音器的设定参数

recorderSettingDic =
[
AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey: 2, //录音的声道数,立体声为双声道
AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
AVEncoderBitRateKey : 320000,
AVSampleRateKey : 44100.0 //录音器每秒采集的录音样本数
]

额外需要注意的部分

在dealloc 方法或者 deinit 方法中最好 recorder = nil, player = nil(如果有播放录音的话)

时间: 2024-10-10 07:35:13

iOS 实现长按录音上滑取消的几种思路的相关文章

小程序中实现录音功能(按住录制上滑取消)

1.template文本,提供一个按住录制的按钮 <view class="tip-touchmove" wx:if="{{showCancelType==2}}"> 上滑取消</view><view class="tip-touchmove" wx:if="{{showCancelType==3}}"> 松开手指,取消录音</view> <view class="

ios开发中APP底部上滑不能调出如WiFi、蓝牙、播放等的设置页面的解决的方法

在开发的APP中我们通常通过手动底部上滑来调出WiFi.蓝牙.飞行模式等的设置页面.有时我们开发的APP无法调出. 解决的方法: 进入iPhone "设置" --> "控制中心"--> "程序内訪问"开关打开就可以! "再锁定屏幕上訪问"  是在锁屏情况下,同意调用设置

Android应用开发中webview上传文件的几种思路

1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClient { // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { if (mUploadMessage != null) return; mUploadMe

关于移动端开发时iOS上滑屏卡顿的问题,以及电话类数字的样式失控问题

写在前面的话: tips:写移动的时候,那些头部需要固定显示在显示屏顶部的,通常在PC端我会用fixed来写.但是,在移动端,这并不是一个好方法,因为弹出输入小键盘的时候,会造成fixed 的元素偏移掉,在这里有两种方法可以解决: 1.建议移动端布局采用以下方式(见正文),如果有错误的地方,还请指正~ 2.另外还看到一篇文章提到这个问题,作者让固定的头部仍然采用fixed, 然后内容区也用了fixed,内容区的fixed元素这样写:{position:fixed;top:80px;bottom:

iOS 上滑隐藏导航,下滑显示导航,仿斗鱼导航效果

UItableView或 UIcollectionView 都是继承UIScrollView 滑动的时候,判断是上滑还是下滑 使用 UIScrollView 的代理方法 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 } span.s1 { color: #ba2da2 } span.s2 { } span.s3 { color: #703daa } func scrollViewWillEnd

iOS音频播放、录音、视频播放、拍照、视频录制

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK

新一代 iPhone 可能为进一步降低机身厚度而取消耳机插口,改用 Lightning 接口.iPhone 6c 传言,2016 年可能迎来两次 iPhone 发布会. 新闻 新一代 iPhone 可能取消耳机插口,改用 Lightning 接口:虽然距离下一代 iPhone 发售还遥遥无期,但是最近已经有关于这款 “iPhone 7” 的一些传言了.据称新一代 iPhone 为了进一步降低机身厚度,将淘汰掉现在事实的耳机行业标准的 3.5mm 耳机几口.耳机接口成为机身厚度的瓶颈已经有一段时间

阻止用户双击使屏幕上滑

/*阻止用户双击使屏幕上滑*/var agent = navigator.userAgent.toLowerCase();        //检测是否是iosvar iLastTouch = null;                                //缓存上一次tap的时间if (agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0){    document.body.addEventListener('tou

iOS手势 规避同一界面上不同子界面同时响应多个手势

最近在项目中遇到这样一个有关iOS手势的问题,首先需求描述如下:“在一个CollectionView中,要求长按不同的cell,产生一个cell的snapshot,此时可拖拽这个snapshot再进行后续的操作(如拖到view的某个位置出发一个事件)”.需求本身并不复杂,但要求每次只能有一个cell响应长按手势,不允许同时有两个或以上的cell响应长按手势. 我们知道UIGestureRecognizer有很多回调和方法可以兼容同一个View上的多种手势,网上相关的教程也很多,比如: http: