Commit 680731c3 authored by lmj_521aiau@163.com's avatar lmj_521aiau@163.com

record

parent f65f329d
...@@ -232,6 +232,13 @@ ...@@ -232,6 +232,13 @@
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
A94D935524F75CE700A886C0 /* Goods */ = {
isa = PBXGroup;
children = (
);
path = Goods;
sourceTree = "<group>";
};
A950F5AD24F4E003007AB63E /* Mine */ = { A950F5AD24F4E003007AB63E /* Mine */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -298,6 +305,7 @@ ...@@ -298,6 +305,7 @@
A95CDF6624E0E8B50066DAE6 /* ShorthandMaster */ = { A95CDF6624E0E8B50066DAE6 /* ShorthandMaster */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A94D935524F75CE700A886C0 /* Goods */,
A950F5B224F4E5A4007AB63E /* Other */, A950F5B224F4E5A4007AB63E /* Other */,
A950F5AD24F4E003007AB63E /* Mine */, A950F5AD24F4E003007AB63E /* Mine */,
A95CE03024E151730066DAE6 /* Record */, A95CE03024E151730066DAE6 /* Record */,
......
...@@ -60,16 +60,16 @@ extension SHBaseNavigationController { ...@@ -60,16 +60,16 @@ extension SHBaseNavigationController {
/// 重写show 影藏底部tabBar /// 重写show 影藏底部tabBar
override func show(_ vc: UIViewController, sender: Any?) { override func show(_ vc: UIViewController, sender: Any?) {
if children.count > 0 { // if children.count > 0 {
vc.hidesBottomBarWhenPushed = true vc.hidesBottomBarWhenPushed = true
} // }
super.show(vc, sender: sender) super.show(vc, sender: sender)
} }
override func pushViewController(_ viewController: UIViewController, animated: Bool) { override func pushViewController(_ viewController: UIViewController, animated: Bool) {
if children.count > 0 { // if children.count > 0 {
viewController.hidesBottomBarWhenPushed = true viewController.hidesBottomBarWhenPushed = true
} // }
super.pushViewController(viewController, animated: animated) super.pushViewController(viewController, animated: animated)
} }
......
...@@ -39,11 +39,11 @@ class SHBaseTabBarController: UITabBarController { ...@@ -39,11 +39,11 @@ class SHBaseTabBarController: UITabBarController {
/// MARK: - 设置子控制器 /// MARK: - 设置子控制器
func configControllers() { func configControllers() {
let recordVC = UIStoryboard.init(name: "Record", bundle: nil).instantiateViewController(withIdentifier: "SHRecordViewController") as! SHRecordViewController // let recordVC = UIStoryboard.init(name: "Record", bundle: nil).instantiateViewController(withIdentifier: "SHRecordViewController") as! SHRecordViewController
addChildVC(vc: recordVC, title: "", image: nil, selectedImage: nil)
// let recordVC = UIStoryboard.init(name: "Record", bundle: nil).instantiateViewController(withIdentifier: "SHRecordListViewController") as! SHRecordListViewController
// addChildVC(vc: recordVC, title: "", image: nil, selectedImage: nil) // addChildVC(vc: recordVC, title: "", image: nil, selectedImage: nil)
let recordVC = UIStoryboard.init(name: "Record", bundle: nil).instantiateViewController(withIdentifier: "SHRecordListViewController") as! SHRecordListViewController
addChildVC(vc: recordVC, title: "", image: nil, selectedImage: nil)
} }
/// 添加子控制器 /// 添加子控制器
......
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="KgC-Ev-sCF"> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="KgC-Ev-sCF">
<rect key="frame" x="0.0" y="44" width="414" height="818"/> <rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<view key="tableFooterView" contentMode="scaleToFill" id="GRL-bF-Wja"> <view key="tableFooterView" hidden="YES" contentMode="scaleToFill" id="GRL-bF-Wja">
<rect key="frame" x="0.0" y="99.5" width="414" height="159"/> <rect key="frame" x="0.0" y="99.5" width="414" height="159"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rxv-bX-pim"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rxv-bX-pim">
<rect key="frame" x="0.0" y="44" width="414" height="818"/> <rect key="frame" x="0.0" y="44" width="414" height="818"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击下方按钮开始会议记录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e3a-rx-wr2"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击下方按钮开始会议记录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e3a-rx-wr2">
...@@ -32,16 +32,9 @@ ...@@ -32,16 +32,9 @@
<constraint firstItem="e3a-rx-wr2" firstAttribute="centerY" secondItem="rxv-bX-pim" secondAttribute="centerY" id="aL1-ev-06b"/> <constraint firstItem="e3a-rx-wr2" firstAttribute="centerY" secondItem="rxv-bX-pim" secondAttribute="centerY" id="aL1-ev-06b"/>
</constraints> </constraints>
</view> </view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aLh-GB-qed">
<rect key="frame" x="20" y="68" width="42" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CuZ-hk-v6W"> <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CuZ-hk-v6W">
<rect key="frame" x="20" y="110" width="374" height="431"/> <rect key="frame" x="0.0" y="44" width="414" height="497"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<string key="text">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>
<color key="textColor" red="0.13333333333333333" green="0.13333333333333333" blue="0.13333333333333333" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="0.13333333333333333" green="0.13333333333333333" blue="0.13333333333333333" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/> <fontDescription key="fontDescription" type="system" pointSize="18"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
...@@ -67,24 +60,22 @@ ...@@ -67,24 +60,22 @@
</subviews> </subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints> <constraints>
<constraint firstItem="aLh-GB-qed" firstAttribute="leading" secondItem="DaM-yZ-bVa" secondAttribute="leading" constant="20" id="3It-jy-KaD"/>
<constraint firstItem="q70-64-27V" firstAttribute="centerX" secondItem="DaM-yZ-bVa" secondAttribute="centerX" id="41z-K6-gpE"/> <constraint firstItem="q70-64-27V" firstAttribute="centerX" secondItem="DaM-yZ-bVa" secondAttribute="centerX" id="41z-K6-gpE"/>
<constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="rxv-bX-pim" secondAttribute="trailing" id="6qs-X2-heL"/> <constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="rxv-bX-pim" secondAttribute="trailing" id="6qs-X2-heL"/>
<constraint firstItem="rxv-bX-pim" firstAttribute="top" secondItem="DjF-HA-js1" secondAttribute="top" id="AQZ-df-zOe"/> <constraint firstItem="rxv-bX-pim" firstAttribute="top" secondItem="DjF-HA-js1" secondAttribute="top" id="AQZ-df-zOe"/>
<constraint firstItem="clS-Cs-9Yq" firstAttribute="centerX" secondItem="DaM-yZ-bVa" secondAttribute="centerX" id="GOg-af-vD1"/> <constraint firstItem="clS-Cs-9Yq" firstAttribute="centerX" secondItem="DaM-yZ-bVa" secondAttribute="centerX" id="GOg-af-vD1"/>
<constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="K9L-No-SyF" secondAttribute="trailing" id="Ivi-Wu-EcZ"/> <constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="K9L-No-SyF" secondAttribute="trailing" id="Ivi-Wu-EcZ"/>
<constraint firstItem="CuZ-hk-v6W" firstAttribute="top" secondItem="DjF-HA-js1" secondAttribute="top" constant="66" id="SAI-k0-xV4"/> <constraint firstItem="CuZ-hk-v6W" firstAttribute="top" secondItem="DjF-HA-js1" secondAttribute="top" id="SAI-k0-xV4"/>
<constraint firstItem="clS-Cs-9Yq" firstAttribute="centerY" secondItem="DaM-yZ-bVa" secondAttribute="centerY" multiplier="1.3" id="TIY-qq-iTt"/> <constraint firstItem="clS-Cs-9Yq" firstAttribute="centerY" secondItem="DaM-yZ-bVa" secondAttribute="centerY" multiplier="1.3" id="TIY-qq-iTt"/>
<constraint firstItem="clS-Cs-9Yq" firstAttribute="top" secondItem="CuZ-hk-v6W" secondAttribute="bottom" constant="20" id="VRW-sn-wwI"/> <constraint firstItem="clS-Cs-9Yq" firstAttribute="top" secondItem="CuZ-hk-v6W" secondAttribute="bottom" constant="20" id="VRW-sn-wwI"/>
<constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="CuZ-hk-v6W" secondAttribute="trailing" constant="20" id="WLe-kH-sd5"/> <constraint firstItem="DjF-HA-js1" firstAttribute="trailing" secondItem="CuZ-hk-v6W" secondAttribute="trailing" id="WLe-kH-sd5"/>
<constraint firstItem="aLh-GB-qed" firstAttribute="top" secondItem="DjF-HA-js1" secondAttribute="top" constant="24" id="dU7-dm-SJD"/>
<constraint firstItem="DjF-HA-js1" firstAttribute="bottom" secondItem="rxv-bX-pim" secondAttribute="bottom" id="emW-tz-PTn"/> <constraint firstItem="DjF-HA-js1" firstAttribute="bottom" secondItem="rxv-bX-pim" secondAttribute="bottom" id="emW-tz-PTn"/>
<constraint firstItem="q70-64-27V" firstAttribute="centerY" secondItem="DaM-yZ-bVa" secondAttribute="centerY" multiplier="1.7" id="fKQ-PL-Ctd"/> <constraint firstItem="q70-64-27V" firstAttribute="centerY" secondItem="DaM-yZ-bVa" secondAttribute="centerY" multiplier="1.7" id="fKQ-PL-Ctd"/>
<constraint firstItem="q70-64-27V" firstAttribute="top" secondItem="K9L-No-SyF" secondAttribute="bottom" id="gBP-hN-9zZ"/> <constraint firstItem="q70-64-27V" firstAttribute="top" secondItem="K9L-No-SyF" secondAttribute="bottom" id="gBP-hN-9zZ"/>
<constraint firstItem="K9L-No-SyF" firstAttribute="top" secondItem="clS-Cs-9Yq" secondAttribute="bottom" id="gOw-3s-ab5"/> <constraint firstItem="K9L-No-SyF" firstAttribute="top" secondItem="clS-Cs-9Yq" secondAttribute="bottom" id="gOw-3s-ab5"/>
<constraint firstItem="K9L-No-SyF" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" id="kfe-hx-KQS"/> <constraint firstItem="K9L-No-SyF" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" id="kfe-hx-KQS"/>
<constraint firstItem="rxv-bX-pim" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" id="rbK-25-QCL"/> <constraint firstItem="rxv-bX-pim" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" id="rbK-25-QCL"/>
<constraint firstItem="CuZ-hk-v6W" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" constant="20" id="ssg-m3-z6O"/> <constraint firstItem="CuZ-hk-v6W" firstAttribute="leading" secondItem="DjF-HA-js1" secondAttribute="leading" id="ssg-m3-z6O"/>
</constraints> </constraints>
<viewLayoutGuide key="safeArea" id="DjF-HA-js1"/> <viewLayoutGuide key="safeArea" id="DjF-HA-js1"/>
</view> </view>
...@@ -159,12 +150,22 @@ ...@@ -159,12 +150,22 @@
<outlet property="delegate" destination="wHB-ed-c6Y" id="DR7-ka-L5N"/> <outlet property="delegate" destination="wHB-ed-c6Y" id="DR7-ka-L5N"/>
</connections> </connections>
</tableView> </tableView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hcc-3O-zgx">
<rect key="frame" x="169" y="723.5" width="76" height="76"/>
<state key="normal" image="record_start"/>
<state key="selected" image="record_stop"/>
<connections>
<action selector="goRecord" destination="wHB-ed-c6Y" eventType="touchUpInside" id="Uju-87-FZr"/>
</connections>
</button>
</subviews> </subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints> <constraints>
<constraint firstItem="Fqf-Ut-95k" firstAttribute="leading" secondItem="DUU-FR-ISH" secondAttribute="leading" id="49u-LG-QQe"/> <constraint firstItem="Fqf-Ut-95k" firstAttribute="leading" secondItem="DUU-FR-ISH" secondAttribute="leading" id="49u-LG-QQe"/>
<constraint firstItem="hcc-3O-zgx" firstAttribute="centerY" secondItem="Iqb-8q-lkf" secondAttribute="centerY" multiplier="1.7" id="641-XT-zpb"/>
<constraint firstItem="Fqf-Ut-95k" firstAttribute="top" secondItem="DUU-FR-ISH" secondAttribute="top" id="Y0T-Gz-EAD"/> <constraint firstItem="Fqf-Ut-95k" firstAttribute="top" secondItem="DUU-FR-ISH" secondAttribute="top" id="Y0T-Gz-EAD"/>
<constraint firstItem="DUU-FR-ISH" firstAttribute="trailing" secondItem="Fqf-Ut-95k" secondAttribute="trailing" id="aj8-fl-bCj"/> <constraint firstItem="DUU-FR-ISH" firstAttribute="trailing" secondItem="Fqf-Ut-95k" secondAttribute="trailing" id="aj8-fl-bCj"/>
<constraint firstItem="hcc-3O-zgx" firstAttribute="centerX" secondItem="Iqb-8q-lkf" secondAttribute="centerX" id="rZl-92-1Fz"/>
<constraint firstItem="DUU-FR-ISH" firstAttribute="bottom" secondItem="Fqf-Ut-95k" secondAttribute="bottom" id="z9J-KI-C16"/> <constraint firstItem="DUU-FR-ISH" firstAttribute="bottom" secondItem="Fqf-Ut-95k" secondAttribute="bottom" id="z9J-KI-C16"/>
</constraints> </constraints>
<viewLayoutGuide key="safeArea" id="DUU-FR-ISH"/> <viewLayoutGuide key="safeArea" id="DUU-FR-ISH"/>
...@@ -175,7 +176,7 @@ ...@@ -175,7 +176,7 @@
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="r5a-Mv-IXk" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="r5a-Mv-IXk" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="937.68115942028987" y="42.857142857142854"/> <point key="canvasLocation" x="978" y="123"/>
</scene> </scene>
<!--Record Show View Controller--> <!--Record Show View Controller-->
<scene sceneID="sKQ-sR-22k"> <scene sceneID="sKQ-sR-22k">
......
...@@ -30,6 +30,7 @@ class SHRecordExportAlertView: UIView { ...@@ -30,6 +30,7 @@ class SHRecordExportAlertView: UIView {
} }
@objc @IBAction func cancelBtnClick(_ sender:UIButton){ @objc @IBAction func cancelBtnClick(_ sender:UIButton){
selectedIndexCallBack?(404)
self.removeFromSuperview() self.removeFromSuperview()
} }
......
...@@ -60,7 +60,6 @@ class SHRecordListViewController: SHBaseViewController { ...@@ -60,7 +60,6 @@ class SHRecordListViewController: SHBaseViewController {
self.tableView?.deleteRows(at: [indexPath], with: .left) self.tableView?.deleteRows(at: [indexPath], with: .left)
self.tableView?.endUpdates() self.tableView?.endUpdates()
// let range: Range = model.pathFile.range(of: "/record.wav")! // let range: Range = model.pathFile.range(of: "/record.wav")!
// let location: Int = model.pathFile.distance(from: model.pathFile.startIndex, to: range.lowerBound) // let location: Int = model.pathFile.distance(from: model.pathFile.startIndex, to: range.lowerBound)
// let subStr = model.pathFile.prefix(location) // let subStr = model.pathFile.prefix(location)
...@@ -86,6 +85,11 @@ class SHRecordListViewController: SHBaseViewController { ...@@ -86,6 +85,11 @@ class SHRecordListViewController: SHBaseViewController {
let mine = UIStoryboard.init(name: "Mine", bundle: nil).instantiateViewController(withIdentifier: "SHMineViewController") as! SHMineViewController let mine = UIStoryboard.init(name: "Mine", bundle: nil).instantiateViewController(withIdentifier: "SHMineViewController") as! SHMineViewController
self.navigationController?.pushViewController(mine, animated: true) self.navigationController?.pushViewController(mine, animated: true)
} }
@IBAction func goRecord(){
let record = UIStoryboard.init(name: "Record", bundle: nil).instantiateViewController(withIdentifier: "SHRecordViewController") as! SHRecordViewController
self.navigationController?.pushViewController(record, animated: true)
}
} }
extension SHRecordListViewController: UITableViewDelegate, UITableViewDataSource{ extension SHRecordListViewController: UITableViewDelegate, UITableViewDataSource{
......
...@@ -85,7 +85,7 @@ class SHRecordShowViewController: SHBaseViewController { ...@@ -85,7 +85,7 @@ class SHRecordShowViewController: SHBaseViewController {
// 如果 result 不是 nil, // 如果 result 不是 nil,
if result != nil { if result != nil {
// 将 textView.text 设置为 result 的最佳音译 // 将 textView.text 设置为 result 的最佳音译
self.recordTextView?.text = result?.bestTranscription.formattedString self.recordTextView?.attributedText = self.textView_text(result?.bestTranscription.formattedString ?? "")
// 如果 result 是最终,将 isFinal 设置为 true // 如果 result 是最终,将 isFinal 设置为 true
isFinal = (result?.isFinal)! isFinal = (result?.isFinal)!
} }
...@@ -114,7 +114,7 @@ class SHRecordShowViewController: SHBaseViewController { ...@@ -114,7 +114,7 @@ class SHRecordShowViewController: SHBaseViewController {
self.navigationItem.titleView = titleLab self.navigationItem.titleView = titleLab
// recordTextView.attributedText = self.textView_text(model!.txt) // recordTextView.attributedText = self.textView_text(model!.txt)
recordTextView?.attributedText = self.textView_text("想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽想找个文组/同好交流群治一治懒癌如题!想要进个群治治懒癌!有的话dd一下谢谢啦!么么主要是原耽,但不限于原耽") recordTextView?.attributedText = self.textView_text("")
recordTextView?.textContainerInset = UIEdgeInsets.init(top: 20, left: 20, bottom: 20, right: 30) recordTextView?.textContainerInset = UIEdgeInsets.init(top: 20, left: 20, bottom: 20, right: 30)
recordTextView?.isEditable = false recordTextView?.isEditable = false
...@@ -243,11 +243,12 @@ class SHRecordShowViewController: SHBaseViewController { ...@@ -243,11 +243,12 @@ class SHRecordShowViewController: SHBaseViewController {
let timeRange = content.range(of: time) let timeRange = content.range(of: time)
let addressRange = content.range(of: address) let addressRange = content.range(of: address)
let textRange = content.range(of: text)
let attStr = NSMutableAttributedString.init(string: content) let attStr = NSMutableAttributedString.init(string: content)
attStr.addAttributes([.font:UIFont.boldSystemFont(ofSize: 18)], range: NSRange(timeRange!, in: content)) attStr.addAttributes([.font:UIFont.boldSystemFont(ofSize: 18)], range: NSRange(timeRange!, in: content))
attStr.addAttributes([.font:UIFont.boldSystemFont(ofSize: 18)], range: NSRange(addressRange!, in: content)) attStr.addAttributes([.font:UIFont.boldSystemFont(ofSize: 18)], range: NSRange(addressRange!, in: content))
attStr.addAttributes([.font:UIFont.systemFont(ofSize: 18)], range: NSRange(textRange!, in: content)) if let textRange = content.range(of: text) {
attStr.addAttributes([.font:UIFont.systemFont(ofSize: 18)], range: NSRange(textRange, in: content))
}
return attStr return attStr
} }
...@@ -268,7 +269,7 @@ class SHRecordShowViewController: SHBaseViewController { ...@@ -268,7 +269,7 @@ class SHRecordShowViewController: SHBaseViewController {
} }
@IBAction func copyBtn(_ sender:UIButton){ @IBAction func copyBtn(_ sender:UIButton){
if self.recordTextView?.text.length == 0 { if self.model?.txt.length == 0 {
return return
} }
let board = UIPasteboard.general let board = UIPasteboard.general
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
import UIKit import UIKit
import AVFoundation import AVFoundation
import Speech import Speech
import PDFGenerator
class SHRecordViewController: SHBaseViewController { class SHRecordViewController: SHBaseViewController {
...@@ -18,9 +19,11 @@ class SHRecordViewController: SHBaseViewController { ...@@ -18,9 +19,11 @@ class SHRecordViewController: SHBaseViewController {
@IBOutlet var waveBgView: UIView! @IBOutlet var waveBgView: UIView!
@IBOutlet var secondsLabel: UILabel! @IBOutlet var secondsLabel: UILabel!
@IBOutlet var recorderBtn: UIButton! @IBOutlet var recorderBtn: UIButton!
@IBOutlet var maskView: UIView! @IBOutlet var maskView: UIView!
private var currentModel: SHRecordModel?
private var currentTxt: String?
private var start: Bool = false private var start: Bool = false
private var save: Bool = false private var save: Bool = false
...@@ -64,8 +67,7 @@ class SHRecordViewController: SHBaseViewController { ...@@ -64,8 +67,7 @@ class SHRecordViewController: SHBaseViewController {
// 语音引擎,负责提供录音输入 // 语音引擎,负责提供录音输入
private var audioEngine = AVAudioEngine() private var audioEngine = AVAudioEngine()
// 文本数据 // 文本数据
private var recognitionTaskText: [String]! private var recognitionTaskText: [String] = []
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
...@@ -73,7 +75,6 @@ class SHRecordViewController: SHBaseViewController { ...@@ -73,7 +75,6 @@ class SHRecordViewController: SHBaseViewController {
setupUI() setupUI()
configPathFile() configPathFile()
configRecorder() configRecorder()
configSpeech()
} }
override func setupUI() { override func setupUI() {
...@@ -84,21 +85,18 @@ class SHRecordViewController: SHBaseViewController { ...@@ -84,21 +85,18 @@ class SHRecordViewController: SHBaseViewController {
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image: UIImage.init(named: "record_nav_user"), style: .plain, target: self, action: #selector(userCilck)) self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image: UIImage.init(named: "record_nav_user"), style: .plain, target: self, action: #selector(userCilck))
self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(image: UIImage.init(named: "record_nav_confirm"), style: .plain, target: self, action: #selector(confirmCilck)) self.view.layoutIfNeeded()
self.view.layoutSubviews()
// if CRUserDefaults.isFirstInstall == false{
// let guide = SHRecordGuideView.init(frame: UIApplication.shared.keyWindow!.bounds) recordTextView?.attributedText = self.textView_text("")
// UIApplication.shared.keyWindow!.addSubview(guide) recordTextView?.textContainerInset = UIEdgeInsets.init(top: 20, left: 20, bottom: 20, right: 30)
// CRUserDefaults.isFirstInstall = true recordTextView?.isEditable = false
// }
let export = SHRecordExportAlertView.loadFromNibAndClass(SHRecordExportAlertView.self)!
export.frame = UIApplication.shared.keyWindow!.bounds
UIApplication.shared.keyWindow!.addSubview(export)
export.selectedIndexCallBack = { index in
}
waveView = SHRecordWaveView(frame: waveBgView.bounds, type: .line, capacity: soundMeterCount)
waveBgView.addSubview(waveView)
}
func setNavTitleAndConfirmBtn(){
let titleLab = UILabel() let titleLab = UILabel()
titleLab.frame = CGRect.init(x: 0, y: 0, width: 200, height: 44) titleLab.frame = CGRect.init(x: 0, y: 0, width: 200, height: 44)
...@@ -107,14 +105,116 @@ class SHRecordViewController: SHBaseViewController { ...@@ -107,14 +105,116 @@ class SHRecordViewController: SHBaseViewController {
titleLab.font = UIFont.systemFont(ofSize: 16) titleLab.font = UIFont.systemFont(ofSize: 16)
titleLab.textAlignment = .center titleLab.textAlignment = .center
titleLab.adjustsFontSizeToFitWidth = true titleLab.adjustsFontSizeToFitWidth = true
self.navigationItem.titleView = titleLab self.navigationItem.titleView = titleLab
self.view.layoutIfNeeded() self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(image: UIImage.init(named: "record_nav_confirm"), style: .plain, target: self, action: #selector(confirmCilck))
self.view.layoutSubviews()
if CRUserDefaults.isFirstInstall == false{
let guide = SHRecordGuideView.init(frame: UIApplication.shared.keyWindow!.bounds)
UIApplication.shared.keyWindow!.addSubview(guide)
CRUserDefaults.isFirstInstall = true
}
}
waveView = SHRecordWaveView(frame: waveBgView.bounds, type: .line, capacity: soundMeterCount) @objc func confirmCilck(){
waveBgView.addSubview(waveView) stopRecord()
save = true
saveContent()
let export = SHRecordExportAlertView.loadFromNibAndClass(SHRecordExportAlertView.self)!
export.frame = UIApplication.shared.keyWindow!.bounds
UIApplication.shared.keyWindow!.addSubview(export)
export.selectedIndexCallBack = { index in
if index == 0 {
self.copyBtn()
} else if index == 1{
self.generatePDF()
} else if index == 2{
self.generateWav()
} else if index == 404{
if self.save == true {
self.currentTxt = ""
self.recognitionTaskText = []
self.recorderBtn.setImage(UIImage.init(named: "record_start"), for: .normal)
self.recordTextView.attributedText = self.textView_text("")
self.configPathFile()
self.configRecorder()
self.recorderBtn.isSelected = false
self.secondsLabel.text = "00:00:00"
self.seconds = 0
self.save = false
self.recorder = self.getRecorder()
}
}
}
}
@objc func userCilck(){
if let txt = recognitionTaskText.first, txt.length == 0 {
return
}
// play()
stopRecord()
save = true
if save == true {
currentTxt = ""
recognitionTaskText = []
recorderBtn.setImage(UIImage.init(named: "record_start"), for: .normal)
recordTextView.attributedText = self.textView_text("")
configPathFile()
configRecorder()
recorderBtn.isSelected = false
secondsLabel.text = "00:00:00"
seconds = 0
save = false
recorder = self.getRecorder()
}
let mine = UIStoryboard.init(name: "Mine", bundle: nil).instantiateViewController(withIdentifier: "SHMineViewController") as! SHMineViewController
self.navigationController?.pushViewController(mine, animated: true)
}
@objc @IBAction func recordBtnClick(_ sender:UIButton){
setNavTitleAndConfirmBtn()
sender.setImage(UIImage.init(named: "record_pause"), for: .normal)
sender.isSelected = !sender.isSelected
if sender.isSelected == true {
self.view.sendSubviewToBack(maskView)
recorder?.record()
start = true
configSpeechTask()
waveTimer = SHTimer.scheduledTimer(timeInterval: updateFequency, target: self, selector: #selector(updateMeters), userInfo: nil, repeats: true)
secondTimer = SHTimer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countSecond), userInfo: nil, repeats: true)
}else{
recorder?.pause()
start = false
if self.recognitionTaskText.count == 0 {
self.recognitionTaskText.append((self.currentTxt ?? "") + "\n")
}else{
var s = ""
if let text = self.currentTxt, text.length > 0 {
s = self.recognitionTaskText.first! + text + "\n"
} else{
s = self.recognitionTaskText.first!
}
self.currentTxt = s
self.recognitionTaskText[0] = s
}
self.currentTxt = ""
speechStop()
timerInvalidate()
}
} }
private func getRecorder() -> AVAudioRecorder?{ private func getRecorder() -> AVAudioRecorder?{
...@@ -207,10 +307,6 @@ class SHRecordViewController: SHBaseViewController { ...@@ -207,10 +307,6 @@ class SHRecordViewController: SHBaseViewController {
catch { print("session active failed") } catch { print("session active failed") }
} }
private func configSpeech(){
recognitionTaskText = [String]()
}
private func configSpeechTask(){ private func configSpeechTask(){
audioEngine = AVAudioEngine() audioEngine = AVAudioEngine()
...@@ -225,10 +321,11 @@ class SHRecordViewController: SHBaseViewController { ...@@ -225,10 +321,11 @@ class SHRecordViewController: SHBaseViewController {
// 如果 result 不是 nil, // 如果 result 不是 nil,
if result != nil { if result != nil {
// 将 textView.text 设置为 result 的最佳音译 // 将 textView.text 设置为 result 的最佳音译
self.currentTxt = result?.bestTranscription.formattedString
if self.recognitionTaskText.count == 0 { if self.recognitionTaskText.count == 0 {
self.recordTextView.text = result?.bestTranscription.formattedString self.recordTextView.attributedText = self.textView_text(result?.bestTranscription.formattedString ?? "")
}else{ }else{
self.recordTextView.text = self.recognitionTaskText.first! + (result?.bestTranscription.formattedString)! self.recordTextView.attributedText = self.textView_text(self.recognitionTaskText.first! + (result?.bestTranscription.formattedString)!)
} }
// 如果 result 是最终,将 isFinal 设置为 true // 如果 result 是最终,将 isFinal 设置为 true
isFinal = (result?.isFinal)! isFinal = (result?.isFinal)!
...@@ -238,9 +335,15 @@ class SHRecordViewController: SHBaseViewController { ...@@ -238,9 +335,15 @@ class SHRecordViewController: SHBaseViewController {
if error != nil || isFinal { if error != nil || isFinal {
if self.recognitionTaskText.count == 0 { if self.recognitionTaskText.count == 0 {
self.recognitionTaskText.append(self.recordTextView.text) self.recognitionTaskText.append((self.currentTxt ?? "") + "\n")
}else{ }else{
self.recognitionTaskText[0] = self.recordTextView.text var s = ""
if let text = self.currentTxt, text.length > 0 {
s = self.recognitionTaskText.first! + text + "\n"
} else{
s = self.recognitionTaskText.first!
}
self.recognitionTaskText[0] = s
} }
if self.recorderBtn.isSelected == true { if self.recorderBtn.isSelected == true {
...@@ -269,66 +372,7 @@ class SHRecordViewController: SHBaseViewController { ...@@ -269,66 +372,7 @@ class SHRecordViewController: SHBaseViewController {
print("audioEngine couldn't start because of an error.") print("audioEngine couldn't start because of an error.")
} }
} }
@objc func userCilck(){
play()
if recordTextView.text.length == 0{
return
}
saveContent()
if save == true {
recorderBtn.setImage(UIImage.init(named: "record_start"), for: .normal)
recordTextView.text = nil
configPathFile()
configRecorder()
configSpeech()
recorderBtn.isSelected = false
secondsLabel.text = "00:00:00"
seconds = 0
save = false
recorder = self.getRecorder()
}
}
@objc func confirmCilck(){
stopRecord()
save = true
}
@objc @IBAction func recordBtnClick(_ sender:UIButton){
sender.setImage(UIImage.init(named: "record_pause"), for: .normal)
sender.isSelected = !sender.isSelected
if sender.isSelected == true {
self.view.sendSubviewToBack(maskView)
recorder?.record()
start = true
configSpeechTask()
waveTimer = SHTimer.scheduledTimer(timeInterval: updateFequency, target: self, selector: #selector(updateMeters), userInfo: nil, repeats: true)
secondTimer = SHTimer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countSecond), userInfo: nil, repeats: true)
}else{
recorder?.pause()
start = false
if self.recognitionTaskText.count == 0 {
self.recognitionTaskText.append(self.recordTextView.text)
}else{
self.recognitionTaskText[0] = self.recordTextView.text
}
self.recognitionTaskText.append(self.recordTextView.text)
speechStop()
timerInvalidate()
}
}
//结束录音 //结束录音
func stopRecord() { func stopRecord() {
if let recorder = self.recorder { if let recorder = self.recorder {
...@@ -339,8 +383,6 @@ class SHRecordViewController: SHBaseViewController { ...@@ -339,8 +383,6 @@ class SHRecordViewController: SHBaseViewController {
} }
recorder.stop() recorder.stop()
// self.recorder = nil // self.recorder = nil
speechStop() speechStop()
timerInvalidate() timerInvalidate()
}else { }else {
...@@ -349,14 +391,11 @@ class SHRecordViewController: SHBaseViewController { ...@@ -349,14 +391,11 @@ class SHRecordViewController: SHBaseViewController {
} }
func saveContent(){ func saveContent(){
if self.recordTextView.text.length == 0{
return
}
let model = SHRecordModel() let model = SHRecordModel()
model.time = Date() model.time = Date()
model.address = "" model.address = ""
model.txt = self.recordTextView.text model.txt = recognitionTaskText.first ?? ""
model.pathFile = postfix_wav_file_path model.pathFile = postfix_wav_file_path
model.during = seconds model.during = seconds
...@@ -369,6 +408,8 @@ class SHRecordViewController: SHBaseViewController { ...@@ -369,6 +408,8 @@ class SHRecordViewController: SHBaseViewController {
list?.append(dic) list?.append(dic)
} }
CRUserDefaults.recordList = list CRUserDefaults.recordList = list
currentModel = model
} }
func timerInvalidate(){ func timerInvalidate(){
...@@ -467,9 +508,82 @@ extension SHRecordViewController{ ...@@ -467,9 +508,82 @@ extension SHRecordViewController{
} catch let error as NSError { } catch let error as NSError {
print("get file path error: \(error)") print("get file path error: \(error)")
} }
return filePaths; return filePaths;
} }
func textView_text(_ text:String) -> NSAttributedString {
let address = "地点: "
let content = address + "\n \n" + text
let addressRange = content.range(of: address)
let attStr = NSMutableAttributedString.init(string: content)
attStr.addAttributes([.font:UIFont.boldSystemFont(ofSize: 18)], range: NSRange(addressRange!, in: content))
if let textRange = content.range(of: text) {
attStr.addAttributes([.font:UIFont.systemFont(ofSize: 18)], range: NSRange(textRange, in: content))
}
return attStr
}
private func copyBtn(){
if self.recordTextView?.text.length == 0 {
return
}
let board = UIPasteboard.general
board.string = self.recordTextView?.text
}
private func generatePDF() {
do {
let range: Range = currentModel!.pathFile.range(of: "/record.wav")!
let location: Int = currentModel!.pathFile.distance(from: currentModel!.pathFile.startIndex, to: range.lowerBound)
let subStr = currentModel!.pathFile.prefix(location)
let documentsFile = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first)!+subStr+"/txt.pdf"
try PDFGenerator.generate(self.recordTextView!, to: documentsFile)
//此三方会把传入控件约束移除 需重新添加
self.recordTextView?.snp.makeConstraints({ (maker) in
maker.top.left.right.equalToSuperview()
maker.bottom.equalTo(secondsLabel.snp.top).offset(-20)
})
// let webvc = SHWebViewController.init()
// webvc.url = documentsFile
// self.navigationController?.pushViewController(webvc, animated: true)
let fileURL = URL.init(fileURLWithPath: documentsFile)
let data = try Data.init(contentsOf: fileURL)
let activityVC = UIActivityViewController(activityItems: [data, fileURL], applicationActivities: nil)
activityVC.completionWithItemsHandler = {
activity, success, items, errot in
// result
}
present(activityVC, animated: true, completion: nil)
} catch let error {
print(error)
}
}
private func generateWav() {
do{
let documentsFile_wav = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first)!.appending(currentModel!.pathFile)
let fileURL_wav = URL.init(fileURLWithPath: documentsFile_wav)
let data_wav = try Data.init(contentsOf: fileURL_wav)
let activityVC = UIActivityViewController(activityItems: [data_wav, fileURL_wav], applicationActivities: nil)
activityVC.completionWithItemsHandler = {
activity, success, items, errot in
// result
}
present(activityVC, animated: true, completion: nil)
} catch let error {
print(error)
}
}
} }
extension SHRecordViewController: SFSpeechRecognizerDelegate { extension SHRecordViewController: SFSpeechRecognizerDelegate {
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
// //
#import "MBProgressHUD+MJ.h" #import "MBProgressHUD+MJ.h"
#import "ZJOauthLoginConfig.h"
//#import "LameTool.h" //#import "LameTool.h"
#import "AESCipher.h" #import "AESCipher.h"
#import "UIView+CornerRadii.h" #import "UIView+CornerRadii.h"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment