6d4L54">54
- [unowned self] in
+ [weak self] in
+            guard let `self` = self else { return }
              self.viewModel.preload()
}
}
                @@ -16,24 +16,20 @@ import PullToRefresh  | 
            ||
| 16 | 16 | 
                 | 
            
| 17 | 17 | 
                 final class MineOrderViewController: UIViewController {
               | 
            
| 18 | 18 | 
                 | 
            
| 19 | 
                - // MARK: Storyboard property  | 
            |
| 20 | 19 | 
                @IBOutlet weak var tableView: UITableView!  | 
            
| 21 | 20 | 
                 | 
            
| 22 | 
                - // MARK: data property  | 
            |
| 23 | 21 | 
                fileprivate let disposeBag = DisposeBag()  | 
            
| 24 | 22 | 
                var viewModel: MineOrderViewModel!  | 
            
| 25 | 23 | 
                 | 
            
| 26 | 
                - // MARK: view function  | 
            |
| 27 | 24 | 
                     override func viewDidLoad() {
               | 
            
| 28 | 25 | 
                super.viewDidLoad()  | 
            
| 29 | 
                -  | 
            |
| 30 | 26 | 
                setup()  | 
            
| 31 | 27 | 
                binding()  | 
            
| 32 | 28 | 
                setNavigationBar()  | 
            
| 33 | 29 | 
                }  | 
            
| 34 | 30 | 
                 | 
            
| 35 | 31 | 
                     private func setNavigationBar() {
               | 
            
| 36 | 
                - title = "我的照片群"  | 
            |
| 32 | 
                + title = "订单记录"  | 
            |
| 37 | 33 | 
                }  | 
            
| 38 | 34 | 
                 | 
            
| 39 | 35 | 
                     private func setup() {
               | 
            
                @@ -43,7 +39,8 @@ final class MineOrderViewController: UIViewController {
               | 
            ||
| 43 | 39 | 
                 | 
            
| 44 | 40 | 
                     private func setupReloadControl() {
               | 
            
| 45 | 41 | 
                         tableView.addPullToRefresh(PullToRefresh()) {
               | 
            
| 46 | 
                - [unowned self] in  | 
            |
| 42 | 
                + [weak self] in  | 
            |
| 43 | 
                +            guard let `self` = self else { return }
               | 
            |
| 47 | 44 | 
                self.viewModel.reload()  | 
            
| 48 | 45 | 
                }  | 
            
| 49 | 46 | 
                tableView.startRefreshing(at: .top)  | 
            
                @@ -51,17 +48,18 @@ final class MineOrderViewController: UIViewController {
               | 
            ||
| 51 | 48 | 
                 | 
            
| 52 | 49 | 
                     private func setupLoadingControl() {
               | 
            
| 53 | 50 | 
                         tableView.addPullToRefresh(PullToRefresh(position: .bottom)) {
               | 
            
| 54 | 
                - [unowned self] in  | 
            |
| 51 | 
                + [weak self] in  | 
            |
| 52 | 
                +            guard let `self` = self else { return }
               | 
            |
| 55 | 53 | 
                self.viewModel.preload()  | 
            
| 56 | 54 | 
                }  | 
            
| 57 | 55 | 
                }  | 
            
| 58 | 56 | 
                }  | 
            
| 59 | 57 | 
                 | 
            
| 60 | 
                -///  | 
            |
| 58 | 
                +/// binding UI  | 
            |
| 61 | 59 | 
                 fileprivate extension MineOrderViewController {
               | 
            
| 62 | 60 | 
                 | 
            
| 63 | 
                -    var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>> {
               | 
            |
| 64 | 
                - return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>>(  | 
            |
| 61 | 
                +    var dataSource: RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>> {
               | 
            |
| 62 | 
                + return RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>>(  | 
            |
| 65 | 63 | 
                             configureCell: { (dataSource, tableView, indexPath, item) in
               | 
            
| 66 | 64 | 
                let cell = tableView.dequeueReusableCell(withIdentifier: "orderCell", for: indexPath) as! OrderCell  | 
            
| 67 | 65 | 
                cell.setInfo(item)  | 
            
                @@ -59,7 +59,7 @@  | 
            ||
| 59 | 59 | 
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qGY-qB-XSl">  | 
            
| 60 | 60 | 
                <rect key="frame" x="0.0" y="301" width="266" height="32"/>  | 
            
| 61 | 61 | 
                <subviews>  | 
            
| 62 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-赞" translatesAutoresizingMaskIntoConstraints="NO" id="UY4-Qk-Rt9">  | 
            |
| 62 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-thumbup" translatesAutoresizingMaskIntoConstraints="NO" id="UY4-Qk-Rt9">  | 
            |
| 63 | 63 | 
                <rect key="frame" x="8" y="-2" width="36" height="36"/>  | 
            
| 64 | 64 | 
                </imageView>  | 
            
| 65 | 65 | 
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vth-es-l5X">  | 
            
                @@ -68,7 +68,7 @@  | 
            ||
| 68 | 68 | 
                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 69 | 69 | 
                <nil key="highlightedColor"/>  | 
            
| 70 | 70 | 
                </label>  | 
            
| 71 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-评论" translatesAutoresizingMaskIntoConstraints="NO" id="31M-cU-gad">  | 
            |
| 71 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-comment" translatesAutoresizingMaskIntoConstraints="NO" id="31M-cU-gad">  | 
            |
| 72 | 72 | 
                <rect key="frame" x="64.5" y="-2" width="36" height="36"/>  | 
            
| 73 | 73 | 
                </imageView>  | 
            
| 74 | 74 | 
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="koM-0x-z5o">  | 
            
                @@ -119,7 +119,7 @@  | 
            ||
| 119 | 119 | 
                </collectionViewCell>  | 
            
| 120 | 120 | 
                </objects>  | 
            
| 121 | 121 | 
                <resources>  | 
            
| 122 | 
                - <image name="icon-评论" width="36" height="36"/>  | 
            |
| 123 | 
                - <image name="icon-赞" width="36" height="36"/>  | 
            |
| 122 | 
                + <image name="icon-comment" width="36" height="36"/>  | 
            |
| 123 | 
                + <image name="icon-thumbup" width="36" height="36"/>  | 
            |
| 124 | 124 | 
                </resources>  | 
            
| 125 | 125 | 
                </document>  | 
            
                @@ -63,7 +63,7 @@  | 
            ||
| 63 | 63 | 
                <color key="textColor" red="0.98431372549999996" green="0.31372549020000001" blue="0.31372549020000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 64 | 64 | 
                <nil key="highlightedColor"/>  | 
            
| 65 | 65 | 
                </label>  | 
            
| 66 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="进入群" translatesAutoresizingMaskIntoConstraints="NO" id="70o-zv-I0l">  | 
            |
| 66 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BTN-enterGroup" translatesAutoresizingMaskIntoConstraints="NO" id="70o-zv-I0l">  | 
            |
| 67 | 67 | 
                <rect key="frame" x="9" y="11.5" width="60" height="25"/>  | 
            
| 68 | 68 | 
                <constraints>  | 
            
| 69 | 69 | 
                <constraint firstAttribute="height" constant="25" id="X8l-P5-3Rd"/>  | 
            
                @@ -421,13 +421,12 @@  | 
            ||
| 421 | 421 | 
                </userDefinedRuntimeAttribute>  | 
            
| 422 | 422 | 
                </userDefinedRuntimeAttributes>  | 
            
| 423 | 423 | 
                </textField>  | 
            
| 424 | 
                - <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oef-gW-sEK">  | 
            |
| 424 | 
                + <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oef-gW-sEK">  | 
            |
| 425 | 425 | 
                <rect key="frame" x="303" y="10" width="60" height="36"/>  | 
            
| 426 | 
                - <color key="backgroundColor" red="0.9995151162147522" green="0.16799759864807129" blue="0.24112263321876526" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 427 | 426 | 
                <constraints>  | 
            
| 428 | 427 | 
                <constraint firstAttribute="width" constant="60" id="lDb-Za-vrb"/>  | 
            
| 429 | 428 | 
                </constraints>  | 
            
| 430 | 
                - <state key="normal" title="发表">  | 
            |
| 429 | 
                + <state key="normal" title="发表" backgroundImage="BTN-send">  | 
            |
| 431 | 430 | 
                <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            
| 432 | 431 | 
                </state>  | 
            
| 433 | 432 | 
                <connections>  | 
            
                @@ -460,7 +459,7 @@  | 
            ||
| 460 | 459 | 
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lCw-zE-NnH">  | 
            
| 461 | 460 | 
                <rect key="frame" x="0.0" y="0.0" width="375" height="48"/>  | 
            
| 462 | 461 | 
                <subviews>  | 
            
| 463 | 
                - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="购买-去水印" translatesAutoresizingMaskIntoConstraints="NO" id="pvN-rn-4Jn">  | 
            |
| 462 | 
                + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-purchase-watermark" translatesAutoresizingMaskIntoConstraints="NO" id="pvN-rn-4Jn">  | 
            |
| 464 | 463 | 
                <rect key="frame" x="123.5" y="0.0" width="48" height="48"/>  | 
            
| 465 | 464 | 
                <constraints>  | 
            
| 466 | 465 | 
                <constraint firstAttribute="height" constant="48" id="2VC-Nk-MXl"/>  | 
            
                @@ -514,6 +513,9 @@  | 
            ||
| 514 | 513 | 
                <constraint firstItem="M7B-fx-M7f" firstAttribute="leading" secondItem="9gv-8b-ehH" secondAttribute="leading" id="svX-zh-yc8"/>  | 
            
| 515 | 514 | 
                </constraints>  | 
            
| 516 | 515 | 
                <viewLayoutGuide key="safeArea" id="9gv-8b-ehH"/>  | 
            
| 516 | 
                + <connections>  | 
            |
| 517 | 
                + <outletCollection property="gestureRecognizers" destination="bqM-7G-5Nw" appends="YES" id="9Q0-1V-Lwz"/>  | 
            |
| 518 | 
                + </connections>  | 
            |
| 517 | 519 | 
                </view>  | 
            
| 518 | 520 | 
                <size key="freeformSize" width="375" height="1000"/>  | 
            
| 519 | 521 | 
                <connections>  | 
            
                @@ -527,6 +529,7 @@  | 
            ||
| 527 | 529 | 
                <outlet property="enterGroupView" destination="gSr-Cm-y1W" id="bNT-Z4-eOG"/>  | 
            
| 528 | 530 | 
                <outlet property="groupAvatar" destination="nng-M9-7cj" id="Y42-Tc-QnV"/>  | 
            
| 529 | 531 | 
                <outlet property="groupName" destination="XM7-FX-tOk" id="ifP-h1-72j"/>  | 
            
| 532 | 
                + <outlet property="keyboardGestureRcognizer" destination="bqM-7G-5Nw" id="uUS-Ox-osk"/>  | 
            |
| 530 | 533 | 
                <outlet property="photoCollectionView" destination="dtf-M8-otl" id="VlY-wa-ekc"/>  | 
            
| 531 | 534 | 
                <outlet property="photoTime" destination="QpI-Mp-URP" id="rJM-TG-fZW"/>  | 
            
| 532 | 535 | 
                <outlet property="sendBtn" destination="oef-gW-sEK" id="3RV-uD-3q1"/>  | 
            
                @@ -541,12 +544,17 @@  | 
            ||
| 541 | 544 | 
                </connections>  | 
            
| 542 | 545 | 
                </viewController>  | 
            
| 543 | 546 | 
                <placeholder placeholderIdentifier="IBFirstResponder" id="MFn-pn-5Jb" userLabel="First Responder" sceneMemberID="firstResponder"/>  | 
            
| 544 | 
                - <tapGestureRecognizer id="thN-TP-atT" userLabel="purchaseGestureRecognizer">  | 
            |
| 547 | 
                + <tapGestureRecognizer enabled="NO" id="bqM-7G-5Nw" userLabel="keyboard Gesture Recognizer">  | 
            |
| 548 | 
                + <connections>  | 
            |
| 549 | 
                + <action selector="recyclingKeyboard:" destination="qsT-Pc-Bhh" id="BWK-9f-gfv"/>  | 
            |
| 550 | 
                + </connections>  | 
            |
| 551 | 
                + </tapGestureRecognizer>  | 
            |
| 552 | 
                + <tapGestureRecognizer id="thN-TP-atT" userLabel="purchase Gesture Recognizer">  | 
            |
| 545 | 553 | 
                <connections>  | 
            
| 546 | 554 | 
                <action selector="purchase:" destination="qsT-Pc-Bhh" id="qjs-Ot-XwA"/>  | 
            
| 547 | 555 | 
                </connections>  | 
            
| 548 | 556 | 
                </tapGestureRecognizer>  | 
            
| 549 | 
                - <tapGestureRecognizer id="EHE-XX-kIE" userLabel="enterGroupGestureRecognizer">  | 
            |
| 557 | 
                + <tapGestureRecognizer id="EHE-XX-kIE" userLabel="enter Group Gesture Recognizer">  | 
            |
| 550 | 558 | 
                <connections>  | 
            
| 551 | 559 | 
                <action selector="enterGroup:" destination="qsT-Pc-Bhh" id="dZE-ok-iUM"/>  | 
            
| 552 | 560 | 
                </connections>  | 
            
                @@ -554,122 +562,146 @@  | 
            ||
| 554 | 562 | 
                </objects>  | 
            
| 555 | 563 | 
                <point key="canvasLocation" x="-1452" y="1137.9310344827586"/>  | 
            
| 556 | 564 | 
                </scene>  | 
            
| 557 | 
                - <!--ShareController-->  | 
            |
| 565 | 
                + <!--Share View Controller-->  | 
            |
| 558 | 566 | 
                <scene sceneID="UTe-rv-qoO">  | 
            
| 559 | 567 | 
                <objects>  | 
            
| 560 | 
                - <viewController storyboardIdentifier="ShareController" automaticallyAdjustsScrollViewInsets="NO" id="KnW-jg-4H5" userLabel="ShareController" customClass="ShareController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController">  | 
            |
| 568 | 
                + <viewController storyboardIdentifier="ShareViewController" automaticallyAdjustsScrollViewInsets="NO" id="KnW-jg-4H5" customClass="ShareViewController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController">  | 
            |
| 561 | 569 | 
                <view key="view" contentMode="scaleToFill" id="rN5-Zb-vwm">  | 
            
| 562 | 570 | 
                <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>  | 
            
| 563 | 571 | 
                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>  | 
            
| 564 | 572 | 
                <subviews>  | 
            
| 565 | 
                - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xUW-ue-yp5">  | 
            |
| 573 | 
                + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="edT-EA-xhZ" userLabel="Share View">  | 
            |
| 566 | 574 | 
                <rect key="frame" x="0.0" y="463" width="375" height="77"/>  | 
            
| 567 | 575 | 
                <subviews>  | 
            
| 568 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qpb-ag-Zb8">  | 
            |
| 569 | 
                - <rect key="frame" x="30.5" y="0.0" width="54" height="54"/>  | 
            |
| 576 | 
                + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="itC-HJ-ZaT" userLabel="circle">  | 
            |
| 577 | 
                + <rect key="frame" x="30.5" y="0.0" width="54" height="71"/>  | 
            |
| 578 | 
                + <subviews>  | 
            |
| 579 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yKG-rx-pgX">  | 
            |
| 580 | 
                + <rect key="frame" x="0.0" y="0.0" width="54" height="54"/>  | 
            |
| 581 | 
                + <constraints>  | 
            |
| 582 | 
                + <constraint firstAttribute="width" constant="54" id="CuL-Dq-ZdA"/>  | 
            |
| 583 | 
                + <constraint firstAttribute="height" constant="54" id="N1z-wg-bWj"/>  | 
            |
| 584 | 
                + </constraints>  | 
            |
| 585 | 
                + <state key="normal" image="share-wxCircle"/>  | 
            |
| 586 | 
                + <connections>  | 
            |
| 587 | 
                + <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="l8P-Cd-0ds"/>  | 
            |
| 588 | 
                + </connections>  | 
            |
| 589 | 
                + </button>  | 
            |
| 590 | 
                + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="朋友圈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3pg-qO-r4l">  | 
            |
| 591 | 
                + <rect key="frame" x="5.5" y="54" width="43" height="17"/>  | 
            |
| 592 | 
                + <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 593 | 
                + <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 594 | 
                + <nil key="highlightedColor"/>  | 
            |
| 595 | 
                + </label>  | 
            |
| 596 | 
                + </subviews>  | 
            |
| 570 | 597 | 
                <constraints>  | 
            
| 571 | 
                - <constraint firstAttribute="height" constant="54" id="1zd-z7-bRA"/>  | 
            |
| 572 | 
                - <constraint firstAttribute="width" constant="54" id="la0-N0-BGD"/>  | 
            |
| 598 | 
                + <constraint firstAttribute="width" constant="54" id="7c7-Ce-enL"/>  | 
            |
| 573 | 599 | 
                </constraints>  | 
            
| 574 | 
                - <state key="normal" image="分享-朋友圈"/>  | 
            |
| 575 | 
                - <connections>  | 
            |
| 576 | 
                - <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="3as-uU-Hcb"/>  | 
            |
| 577 | 
                - </connections>  | 
            |
| 578 | 
                - </button>  | 
            |
| 579 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6ux-OL-8wy">  | 
            |
| 580 | 
                - <rect key="frame" x="117" y="0.0" width="54" height="54"/>  | 
            |
| 600 | 
                + </stackView>  | 
            |
| 601 | 
                + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="W6V-MR-s2s" userLabel="weixin">  | 
            |
| 602 | 
                + <rect key="frame" x="117" y="0.0" width="54" height="71"/>  | 
            |
| 603 | 
                + <subviews>  | 
            |
| 604 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WHf-tp-9sX">  | 
            |
| 605 | 
                + <rect key="frame" x="0.0" y="0.0" width="54" height="54"/>  | 
            |
| 606 | 
                + <constraints>  | 
            |
| 607 | 
                + <constraint firstAttribute="height" constant="54" id="VCa-wM-G0W"/>  | 
            |
| 608 | 
                + <constraint firstAttribute="width" constant="54" id="bOu-A0-deg"/>  | 
            |
| 609 | 
                + </constraints>  | 
            |
| 610 | 
                + <state key="normal" image="share-wx"/>  | 
            |
| 611 | 
                + <connections>  | 
            |
| 612 | 
                + <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="HIE-st-eD9"/>  | 
            |
| 613 | 
                + </connections>  | 
            |
| 614 | 
                + </button>  | 
            |
| 615 | 
                + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ju7-a4-MAb" userLabel="微信">  | 
            |
| 616 | 
                + <rect key="frame" x="12.5" y="54" width="29" height="17"/>  | 
            |
| 617 | 
                + <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 618 | 
                + <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 619 | 
                + <nil key="highlightedColor"/>  | 
            |
| 620 | 
                + </label>  | 
            |
| 621 | 
                + </subviews>  | 
            |
| 581 | 622 | 
                <constraints>  | 
            
| 582 | 
                - <constraint firstAttribute="width" constant="54" id="5X9-C3-GLj"/>  | 
            |
| 583 | 
                - <constraint firstAttribute="height" constant="54" id="8b9-pJ-MY4"/>  | 
            |
| 623 | 
                + <constraint firstAttribute="width" constant="54" id="U1a-2q-73r"/>  | 
            |
| 584 | 624 | 
                </constraints>  | 
            
| 585 | 
                - <state key="normal" image="分享-微信好友"/>  | 
            |
| 586 | 
                - <connections>  | 
            |
| 587 | 
                - <action selector="shareToWei" destination="KnW-jg-4H5" eventType="touchUpInside" id="6Sc-0e-z9l"/>  | 
            |
| 588 | 
                - </connections>  | 
            |
| 589 | 
                - </button>  | 
            |
| 590 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x2h-L3-H9s">  | 
            |
| 591 | 
                - <rect key="frame" x="285.5" y="0.0" width="54" height="54"/>  | 
            |
| 625 | 
                + </stackView>  | 
            |
| 626 | 
                + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="KU1-aO-nLf" userLabel="QQ">  | 
            |
| 627 | 
                + <rect key="frame" x="202" y="0.0" width="54" height="71"/>  | 
            |
| 628 | 
                + <subviews>  | 
            |
| 629 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgp-ou-XXF">  | 
            |
| 630 | 
                + <rect key="frame" x="0.0" y="0.0" width="54" height="54"/>  | 
            |
| 631 | 
                + <constraints>  | 
            |
| 632 | 
                + <constraint firstAttribute="width" constant="54" id="HIs-RN-iJa"/>  | 
            |
| 633 | 
                + <constraint firstAttribute="height" constant="54" id="sjs-5I-q9G"/>  | 
            |
| 634 | 
                + </constraints>  | 
            |
| 635 | 
                + <state key="normal" image="share-QQ"/>  | 
            |
| 636 | 
                + <connections>  | 
            |
| 637 | 
                + <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="uxZ-de-KlE"/>  | 
            |
| 638 | 
                + </connections>  | 
            |
| 639 | 
                + </button>  | 
            |
| 640 | 
                + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="QQ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cQk-kV-x1B" userLabel="QQ">  | 
            |
| 641 | 
                + <rect key="frame" x="16.5" y="54" width="21.5" height="17"/>  | 
            |
| 642 | 
                + <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 643 | 
                + <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 644 | 
                + <nil key="highlightedColor"/>  | 
            |
| 645 | 
                + </label>  | 
            |
| 646 | 
                + </subviews>  | 
            |
| 592 | 647 | 
                <constraints>  | 
            
| 593 | 
                - <constraint firstAttribute="width" constant="54" id="JUP-IW-DiC"/>  | 
            |
| 594 | 
                - <constraint firstAttribute="height" constant="54" id="xGJ-At-rzn"/>  | 
            |
| 648 | 
                + <constraint firstAttribute="width" constant="54" id="Meq-Td-X06"/>  | 
            |
| 595 | 649 | 
                </constraints>  | 
            
| 596 | 
                - <state key="normal" image="分享-微博"/>  | 
            |
| 597 | 
                - <connections>  | 
            |
| 598 | 
                - <action selector="shareToWeibo" destination="KnW-jg-4H5" eventType="touchUpInside" id="VYj-hh-MyW"/>  | 
            |
| 599 | 
                - </connections>  | 
            |
| 600 | 
                - </button>  | 
            |
| 601 | 
                - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yqF-ZW-9kd">  | 
            |
| 602 | 
                - <rect key="frame" x="202" y="0.0" width="54" height="54"/>  | 
            |
| 650 | 
                + </stackView>  | 
            |
| 651 | 
                + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="ZLk-gf-Jzh" userLabel="weibo">  | 
            |
| 652 | 
                + <rect key="frame" x="285.5" y="0.0" width="54" height="71"/>  | 
            |
| 653 | 
                + <subviews>  | 
            |
| 654 | 
                + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uCq-aJ-DOY">  | 
            |
| 655 | 
                + <rect key="frame" x="0.0" y="0.0" width="54" height="54"/>  | 
            |
| 656 | 
                + <constraints>  | 
            |
| 657 | 
                + <constraint firstAttribute="width" constant="54" id="9PQ-od-zwh"/>  | 
            |
| 658 | 
                + <constraint firstAttribute="height" constant="54" id="Dd2-ob-7nA"/>  | 
            |
| 659 | 
                + </constraints>  | 
            |
| 660 | 
                + <state key="normal" image="share-weibo"/>  | 
            |
| 661 | 
                + <connections>  | 
            |
| 662 | 
                + <action selector="shareToFriendCircle" destination="KnW-jg-4H5" eventType="touchUpInside" id="inK-7r-8gZ"/>  | 
            |
| 663 | 
                + </connections>  | 
            |
| 664 | 
                + </button>  | 
            |
| 665 | 
                + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微博" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ycS-qw-cbn" userLabel="微博">  | 
            |
| 666 | 
                + <rect key="frame" x="12.5" y="54" width="29" height="17"/>  | 
            |
| 667 | 
                + <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 668 | 
                + <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 669 | 
                + <nil key="highlightedColor"/>  | 
            |
| 670 | 
                + </label>  | 
            |
| 671 | 
                + </subviews>  | 
            |
| 603 | 672 | 
                <constraints>  | 
            
| 604 | 
                - <constraint firstAttribute="height" constant="54" id="3gE-we-sHc"/>  | 
            |
| 605 | 
                - <constraint firstAttribute="width" constant="54" id="j1v-So-HZy"/>  | 
            |
| 673 | 
                + <constraint firstAttribute="width" constant="54" id="JRS-hW-4fd"/>  | 
            |
| 606 | 674 | 
                </constraints>  | 
            
| 607 | 
                - <state key="normal" image="分享-QQ"/>  | 
            |
| 608 | 
                - <connections>  | 
            |
| 609 | 
                - <action selector="shareToQQ" destination="KnW-jg-4H5" eventType="touchUpInside" id="AUu-PL-Vdh"/>  | 
            |
| 610 | 
                - </connections>  | 
            |
| 611 | 
                - </button>  | 
            |
| 612 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="朋友圈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nO4-Ve-OiO">  | 
            |
| 613 | 
                - <rect key="frame" x="36" y="60" width="43" height="17"/>  | 
            |
| 614 | 
                - <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 615 | 
                - <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 616 | 
                - <nil key="highlightedColor"/>  | 
            |
| 617 | 
                - </label>  | 
            |
| 618 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微信" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KS7-62-qGm">  | 
            |
| 619 | 
                - <rect key="frame" x="129.5" y="60" width="29" height="17"/>  | 
            |
| 620 | 
                - <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 621 | 
                - <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 622 | 
                - <nil key="highlightedColor"/>  | 
            |
| 623 | 
                - </label>  | 
            |
| 624 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="QQ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HHz-QK-Fr2">  | 
            |
| 625 | 
                - <rect key="frame" x="218" y="60" width="22" height="17"/>  | 
            |
| 626 | 
                - <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 627 | 
                - <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 628 | 
                - <nil key="highlightedColor"/>  | 
            |
| 629 | 
                - </label>  | 
            |
| 630 | 
                - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="微博" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xa5-ke-ek6">  | 
            |
| 631 | 
                - <rect key="frame" x="298" y="60" width="29" height="17"/>  | 
            |
| 632 | 
                - <fontDescription key="fontDescription" type="system" pointSize="14"/>  | 
            |
| 633 | 
                - <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  | 
            |
| 634 | 
                - <nil key="highlightedColor"/>  | 
            |
| 635 | 
                - </label>  | 
            |
| 675 | 
                + </stackView>  | 
            |
| 636 | 676 | 
                </subviews>  | 
            
| 637 | 677 | 
                <constraints>  | 
            
| 638 | 
                - <constraint firstItem="HHz-QK-Fr2" firstAttribute="centerX" secondItem="yqF-ZW-9kd" secondAttribute="centerX" id="7l8-1r-eQh"/>  | 
            |
| 639 | 
                - <constraint firstAttribute="bottom" secondItem="HHz-QK-Fr2" secondAttribute="bottom" id="FSC-Ek-9t8"/>  | 
            |
| 640 | 
                - <constraint firstItem="yqF-ZW-9kd" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="KPI-J0-KS4"/>  | 
            |
| 641 | 
                - <constraint firstItem="xa5-ke-ek6" firstAttribute="centerX" secondItem="x2h-L3-H9s" secondAttribute="centerX" id="M27-U4-Q3M"/>  | 
            |
| 642 | 
                - <constraint firstAttribute="height" constant="77" id="N2d-i8-gd3"/>  | 
            |
| 643 | 
                - <constraint firstItem="yqF-ZW-9kd" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="220:180" id="NbH-9w-UIS"/>  | 
            |
| 644 | 
                - <constraint firstAttribute="bottom" secondItem="KS7-62-qGm" secondAttribute="bottom" id="PSC-uY-GlG"/>  | 
            |
| 645 | 
                - <constraint firstItem="x2h-L3-H9s" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="X1L-d4-RO3"/>  | 
            |
| 646 | 
                - <constraint firstItem="qpb-ag-Zb8" firstAttribute="top" secondItem="xUW-ue-yp5" secondAttribute="top" id="Xhp-xq-TAQ"/>  | 
            |
| 647 | 
                - <constraint firstItem="6ux-OL-8wy" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="138:180" id="b7V-Ap-t1L"/>  | 
            |
| 648 | 
                - <constraint firstAttribute="bottom" secondItem="nO4-Ve-OiO" secondAttribute="bottom" id="dJP-qK-Tlu"/>  | 
            |
| 649 | 
                - <constraint firstItem="KS7-62-qGm" firstAttribute="centerX" secondItem="6ux-OL-8wy" secondAttribute="centerX" id="eHD-Mp-ViT"/>  | 
            |
| 650 | 
                - <constraint firstItem="nO4-Ve-OiO" firstAttribute="centerX" secondItem="qpb-ag-Zb8" secondAttribute="centerX" id="gw3-SW-dNJ"/>  | 
            |
| 651 | 
                - <constraint firstItem="x2h-L3-H9s" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="300:180" id="rbh-jj-rpj"/>  | 
            |
| 652 | 
                - <constraint firstItem="qpb-ag-Zb8" firstAttribute="centerX" secondItem="xUW-ue-yp5" secondAttribute="centerX" multiplier="55:180" id="sWn-3o-xfe"/>  | 
            |
| 653 | 
                - <constraint firstAttribute="bottom" secondItem="xa5-ke-ek6" secondAttribute="bottom" id="uCt-id-dos"/>  | 
            |
| 654 | 
                - <constraint firstItem="6ux-OL-8wy" firstAttribute="centerY" secondItem="qpb-ag-Zb8" secondAttribute="centerY" id="xcU-1M-cr8"/>  | 
            |
| 678 | 
                + <constraint firstItem="KU1-aO-nLf" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="2U4-8e-O3g"/>  | 
            |
| 679 | 
                + <constraint firstItem="ZLk-gf-Jzh" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="300:180" id="3Kp-5r-ImR"/>  | 
            |
| 680 | 
                + <constraint firstItem="itC-HJ-ZaT" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="55:180" id="7D5-Uy-aAS"/>  | 
            |
| 681 | 
                + <constraint firstItem="W6V-MR-s2s" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="B2o-vs-NbY"/>  | 
            |
| 682 | 
                + <constraint firstItem="KU1-aO-nLf" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="220:180" id="HbQ-Ef-QBp"/>  | 
            |
| 683 | 
                + <constraint firstItem="ZLk-gf-Jzh" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="NSS-yv-eAq"/>  | 
            |
| 684 | 
                + <constraint firstItem="itC-HJ-ZaT" firstAttribute="top" secondItem="edT-EA-xhZ" secondAttribute="top" id="fRA-ze-0tQ"/>  | 
            |
| 685 | 
                + <constraint firstAttribute="height" constant="77" id="q4w-sh-fN4"/>  | 
            |
| 686 | 
                + <constraint firstItem="W6V-MR-s2s" firstAttribute="centerX" secondItem="edT-EA-xhZ" secondAttribute="centerX" multiplier="138:180" id="tOg-mT-rNp"/>  | 
            |
| 655 | 687 | 
                </constraints>  | 
            
| 656 | 688 | 
                </view>  | 
            
| 657 | 689 | 
                </subviews>  | 
            
| 658 | 690 | 
                <gestureRecognizers/>  | 
            
| 659 | 691 | 
                <constraints>  | 
            
| 660 | 
                - <constraint firstItem="xUW-ue-yp5" firstAttribute="leading" secondItem="C6P-7J-fWs" secondAttribute="leading" id="Afy-jR-Jec"/>  | 
            |
| 661 | 
                - <constraint firstItem="C6P-7J-fWs" firstAttribute="bottom" secondItem="xUW-ue-yp5" secondAttribute="bottom" constant="127" id="hco-RD-Kle"/>  | 
            |
| 662 | 
                - <constraint firstItem="C6P-7J-fWs" firstAttribute="trailing" secondItem="xUW-ue-yp5" secondAttribute="trailing" id="lAd-Wf-RcE"/>  | 
            |
| 692 | 
                + <constraint firstItem="edT-EA-xhZ" firstAttribute="trailing" secondItem="C6P-7J-fWs" secondAttribute="trailing" id="6h4-ug-H2a"/>  | 
            |
| 693 | 
                + <constraint firstItem="edT-EA-xhZ" firstAttribute="leading" secondItem="C6P-7J-fWs" secondAttribute="leading" id="RS3-mc-Bi6"/>  | 
            |
| 694 | 
                + <constraint firstItem="C6P-7J-fWs" firstAttribute="bottom" secondItem="edT-EA-xhZ" secondAttribute="bottom" constant="127" id="iF3-AG-M9e"/>  | 
            |
| 663 | 695 | 
                </constraints>  | 
            
| 664 | 696 | 
                <viewLayoutGuide key="safeArea" id="C6P-7J-fWs"/>  | 
            
| 665 | 697 | 
                </view>  | 
            
| 666 | 698 | 
                <connections>  | 
            
| 667 | 
                - <outlet property="shareView" destination="xUW-ue-yp5" id="I5g-Zk-9uW"/>  | 
            |
| 699 | 
                + <outlet property="shareView" destination="edT-EA-xhZ" id="DNu-Ue-V2y"/>  | 
            |
| 668 | 700 | 
                </connections>  | 
            
| 669 | 701 | 
                </viewController>  | 
            
| 670 | 702 | 
                <placeholder placeholderIdentifier="IBFirstResponder" id="9LO-35-FRH" userLabel="First Responder" sceneMemberID="firstResponder"/>  | 
            
| 671 | 703 | 
                </objects>  | 
            
| 672 | 
                - <point key="canvasLocation" x="-513" y="1287"/>  | 
            |
| 704 | 
                + <point key="canvasLocation" x="-73" y="469"/>  | 
            |
| 673 | 705 | 
                </scene>  | 
            
| 674 | 706 | 
                <!--PhotoPreviewViewController-->  | 
            
| 675 | 707 | 
                <scene sceneID="yhk-2u-fiu">  | 
            
                @@ -779,20 +811,21 @@  | 
            ||
| 779 | 811 | 
                <resources>  | 
            
| 780 | 812 | 
                <image name="BTN-comment" width="138" height="138"/>  | 
            
| 781 | 813 | 
                <image name="BTN-download" width="96" height="96"/>  | 
            
| 814 | 
                + <image name="BTN-enterGroup" width="114" height="60"/>  | 
            |
| 782 | 815 | 
                <image name="BTN-rotate" width="96" height="96"/>  | 
            
| 816 | 
                + <image name="BTN-send" width="608" height="304"/>  | 
            |
| 783 | 817 | 
                <image name="BTN-share" width="138" height="138"/>  | 
            
| 784 | 818 | 
                <image name="BTN-thumbup" width="192" height="192"/>  | 
            
| 785 | 819 | 
                <image name="defaultAvatar" width="240" height="240"/>  | 
            
| 786 | 820 | 
                <image name="icon-comment" width="36" height="36"/>  | 
            
| 821 | 
                + <image name="icon-purchase-watermark" width="96" height="96"/>  | 
            |
| 787 | 822 | 
                <image name="icon-thumbup" width="36" height="36"/>  | 
            
| 788 | 823 | 
                <image name="icon-time" width="36" height="36"/>  | 
            
| 789 | 824 | 
                <image name="list-arrow" width="24" height="36"/>  | 
            
| 790 | 825 | 
                <image name="navigation-back" width="36" height="72"/>  | 
            
| 791 | 
                - <image name="分享-QQ" width="162" height="162"/>  | 
            |
| 792 | 
                - <image name="分享-微信好友" width="162" height="162"/>  | 
            |
| 793 | 
                - <image name="分享-微博" width="162" height="162"/>  | 
            |
| 794 | 
                - <image name="分享-朋友圈" width="162" height="162"/>  | 
            |
| 795 | 
                - <image name="购买-去水印" width="96" height="96"/>  | 
            |
| 796 | 
                - <image name="进入群" width="114" height="60"/>  | 
            |
| 826 | 
                + <image name="share-QQ" width="162" height="162"/>  | 
            |
| 827 | 
                + <image name="share-weibo" width="162" height="162"/>  | 
            |
| 828 | 
                + <image name="share-wx" width="162" height="162"/>  | 
            |
| 829 | 
                + <image name="share-wxCircle" width="162" height="162"/>  | 
            |
| 797 | 830 | 
                </resources>  | 
            
| 798 | 831 | 
                </document>  | 
            
                @@ -14,7 +14,7 @@ final class PhotoDetailCoordinator: Coordinator {
               | 
            ||
| 14 | 14 | 
                let photoDetailViewController: PhotoDetailViewController  | 
            
| 15 | 15 | 
                let shareListViewModel: PhotoDetailListViewModel  | 
            
| 16 | 16 | 
                 | 
            
| 17 | 
                - fileprivate var coordinators = [String: Coordinator]()  | 
            |
| 17 | 
                + fileprivate var coordinators = [CoordinatorKey: Coordinator]()  | 
            |
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                init(_ photoDetailVC: PhotoDetailViewController,  | 
            
| 20 | 20 | 
                nav: UINavigationController,  | 
            
                @@ -42,7 +42,7 @@ extension PhotoDetailCoordinator: PhotoDetailViewModelDelegate {
               | 
            ||
| 42 | 42 | 
                vc.viewModel = GroupViewModel(groupItem: item)  | 
            
| 43 | 43 | 
                let coordinator = GroupCoordinator(vc,  | 
            
| 44 | 44 | 
                navigationController: navigationController)  | 
            
| 45 | 
                - coordinators["group"] = coordinator  | 
            |
| 45 | 
                + coordinators[.group] = coordinator  | 
            |
| 46 | 46 | 
                 | 
            
| 47 | 47 | 
                navigationController.pushViewController(vc)  | 
            
| 48 | 48 | 
                }  | 
            
                @@ -44,6 +44,7 @@ final class PhotoDetailViewController: UIViewController {
               | 
            ||
| 44 | 44 | 
                @IBOutlet weak var waterMarkImage: UIImageView!  | 
            
| 45 | 45 | 
                @IBOutlet weak var waterMarkLabel: UILabel!  | 
            
| 46 | 46 | 
                 | 
            
| 47 | 
                + @IBOutlet var keyboardGestureRcognizer: UITapGestureRecognizer!  | 
            |
| 47 | 48 | 
                @IBOutlet weak var thumbupViewHeightConstraint: NSLayoutConstraint!  | 
            
| 48 | 49 | 
                @IBOutlet weak var commentEditYConstraint: NSLayoutConstraint!  | 
            
| 49 | 50 | 
                 | 
            
                @@ -56,6 +57,7 @@ final class PhotoDetailViewController: UIViewController {
               | 
            ||
| 56 | 57 | 
                // MARK: view function  | 
            
| 57 | 58 | 
                     override func viewDidLoad() {
               | 
            
| 58 | 59 | 
                super.viewDidLoad()  | 
            
| 60 | 
                + title = "详情"  | 
            |
| 59 | 61 | 
                binding()  | 
            
| 60 | 62 | 
                setup()  | 
            
| 61 | 63 | 
                }  | 
            
                @@ -80,19 +82,13 @@ final class PhotoDetailViewController: UIViewController {
               | 
            ||
| 80 | 82 | 
                }  | 
            
| 81 | 83 | 
                }  | 
            
| 82 | 84 | 
                 | 
            
| 83 | 
                -//MARK textField delegate  | 
            |
| 84 | 
                -extension PhotoDetailViewController: UIGestureRecognizerDelegate {
               | 
            |
| 85 | 
                - // MARK: textField  | 
            |
| 86 | 
                -  | 
            |
| 87 | 
                -    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
               | 
            |
| 88 | 
                - return commentTextField.isFirstResponder  | 
            |
| 89 | 
                - }  | 
            |
| 90 | 
                -  | 
            |
| 91 | 
                -}  | 
            |
| 92 | 
                -  | 
            |
| 93 | 
                -  | 
            |
| 94 | 85 | 
                /// bind storyboard gesture action  | 
            
| 95 | 86 | 
                 extension PhotoDetailViewController {
               | 
            
| 87 | 
                +  | 
            |
| 88 | 
                +    @IBAction func recyclingKeyboard(_ sender: UITapGestureRecognizer) {
               | 
            |
| 89 | 
                + commentTextField.resignFirstResponder()  | 
            |
| 90 | 
                + }  | 
            |
| 91 | 
                +  | 
            |
| 96 | 92 | 
                     @IBAction func purchase(_ sender: UITapGestureRecognizer) {
               | 
            
| 97 | 93 | 
                 | 
            
| 98 | 94 | 
                }  | 
            
                @@ -105,7 +101,7 @@ extension PhotoDetailViewController {
               | 
            ||
| 105 | 101 | 
                /// bind storyboard button action  | 
            
| 106 | 102 | 
                 extension PhotoDetailViewController {
               | 
            
| 107 | 103 | 
                     @IBAction func share() {
               | 
            
| 108 | 
                - let ctl = UIStoryboard.photoDetail.instantiateController(ShareController.self)  | 
            |
| 104 | 
                + let ctl = UIStoryboard.photoDetail.instantiateController(ShareViewController.self)  | 
            |
| 109 | 105 | 
                ctl.shareContent = "我使用拍爱分享了一张美图,你也快来试试吧"  | 
            
| 110 | 106 | 
                // ctl.shareImgUrlThumb = datas[currentPhotoIndex].photo_thumbnail_url  | 
            
| 111 | 107 | 
                // ctl.shareUrl = datas[currentPhotoIndex].photo_share_url  | 
            
                @@ -283,6 +279,9 @@ extension PhotoDetailViewController {
               | 
            ||
| 283 | 279 | 
                .notification(UIResponder.keyboardWillShowNotification)  | 
            
| 284 | 280 | 
                .takeUntil(self.rx.deallocated)  | 
            
| 285 | 281 | 
                             .subscribe { [unowned self] notification in
               | 
            
| 282 | 
                +  | 
            |
| 283 | 
                + self.keyboardGestureRcognizer.isEnabled = true  | 
            |
| 284 | 
                +  | 
            |
| 286 | 285 | 
                guard let userInfo = notification.element?.userInfo,  | 
            
| 287 | 286 | 
                let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,  | 
            
| 288 | 287 | 
                let timeInterval = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval,  | 
            
                @@ -301,6 +300,8 @@ extension PhotoDetailViewController {
               | 
            ||
| 301 | 300 | 
                .notification(UIResponder.keyboardWillHideNotification)  | 
            
| 302 | 301 | 
                .takeUntil(self.rx.deallocated)  | 
            
| 303 | 302 | 
                             .subscribe { [unowned self] notification in
               | 
            
| 303 | 
                + self.keyboardGestureRcognizer.isEnabled = false  | 
            |
| 304 | 
                +  | 
            |
| 304 | 305 | 
                guard let userInfo = notification.element?.userInfo,  | 
            
| 305 | 306 | 
                let timeInterval = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval,  | 
            
| 306 | 307 | 
                let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? Int  | 
            
                @@ -1,5 +1,5 @@  | 
            ||
| 1 | 1 | 
                //  | 
            
| 2 | 
                -// ShareController.swift  | 
            |
| 2 | 
                +// ShareViewController.swift  | 
            |
| 3 | 3 | 
                // PaiAi  | 
            
| 4 | 4 | 
                //  | 
            
| 5 | 5 | 
                // Created by zhengjianfei on 16/4/7.  | 
            
                @@ -10,24 +10,24 @@ import UIKit  | 
            ||
| 10 | 10 | 
                import PaiaiDataKit  | 
            
| 11 | 11 | 
                import PaiaiUIKit  | 
            
| 12 | 12 | 
                 | 
            
| 13 | 
                -final class ShareController: UIViewController {
               | 
            |
| 13 | 
                +final class ShareViewController: AlertViewController {
               | 
            |
| 14 | 14 | 
                 | 
            
| 15 | 
                - // MARK: Storyboard property  | 
            |
| 16 | 15 | 
                @IBOutlet weak var shareView: UIView!  | 
            
| 17 | 
                -  | 
            |
| 16 | 
                +  | 
            |
| 17 | 
                +    override var animationView: UIView? {
               | 
            |
| 18 | 
                + return shareView  | 
            |
| 19 | 
                + }  | 
            |
| 20 | 
                +  | 
            |
| 21 | 
                +    override var style: AlertViewController.Style {
               | 
            |
| 22 | 
                + return .actionSheet  | 
            |
| 23 | 
                + }  | 
            |
| 24 | 
                +  | 
            |
| 18 | 25 | 
                // MARK: parameter property  | 
            
| 19 | 26 | 
                var shareContent: String = ""  | 
            
| 20 | 27 | 
                var shareImg: UIImage?  | 
            
| 21 | 28 | 
                lazy var shareImgUrlThumb: String = ""  | 
            
| 22 | 29 | 
                lazy var shareUrl: String = ""  | 
            
| 23 | 
                -// let transitioning = FFTransitioning(alertStyle: .actionSheet)  | 
            |
| 24 | 
                -  | 
            |
| 25 | 
                -    required init?(coder aDecoder: NSCoder) {
               | 
            |
| 26 | 
                - super.init(coder: aDecoder)  | 
            |
| 27 | 
                -// transitioningDelegate = transitioning  | 
            |
| 28 | 
                - }  | 
            |
| 29 | 
                -  | 
            |
| 30 | 
                - // MARK: view function  | 
            |
| 30 | 
                +  | 
            |
| 31 | 31 | 
                     override func viewDidLoad() {
               | 
            
| 32 | 32 | 
                super.viewDidLoad()  | 
            
| 33 | 33 | 
                let imageView = UIImageView()  | 
            
                @@ -1,29 +0,0 @@  | 
            ||
| 1 | 
                -//  | 
            |
| 2 | 
                -// ShareView.swift  | 
            |
| 3 | 
                -// Paiai_iOS  | 
            |
| 4 | 
                -//  | 
            |
| 5 | 
                -// Created by ffib on 2019/3/21.  | 
            |
| 6 | 
                -// Copyright © 2019 yb. All rights reserved.  | 
            |
| 7 | 
                -//  | 
            |
| 8 | 
                -  | 
            |
| 9 | 
                -import UIKit  | 
            |
| 10 | 
                -  | 
            |
| 11 | 
                -class ShareView: UIView {
               | 
            |
| 12 | 
                -  | 
            |
| 13 | 
                -}  | 
            |
| 14 | 
                -  | 
            |
| 15 | 
                -  | 
            |
| 16 | 
                -  | 
            |
| 17 | 
                -extension ShareView {
               | 
            |
| 18 | 
                -  | 
            |
| 19 | 
                -    func activateConstraints() {
               | 
            |
| 20 | 
                -  | 
            |
| 21 | 
                - }  | 
            |
| 22 | 
                -  | 
            |
| 23 | 
                -    func activateConstraintsShareView() {
               | 
            |
| 24 | 
                -        guard let superView = superview else { return }
               | 
            |
| 25 | 
                -  | 
            |
| 26 | 
                - self.translatesAutoresizingMaskIntoConstraints = false  | 
            |
| 27 | 
                -  | 
            |
| 28 | 
                - }  | 
            |
| 29 | 
                -}  |