专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

微博整合照片选择器

  • 照片选择器 工程中的 PhotoSelector 文件夹拖入到微博项目中
  • HMComposeViewController 中懒加载 照片选择控制器 photoSelectorVC
    /// 照片选择控制器
    private lazy var photoSelectorVC: HMComposeViewController = HMComposeViewController()
    
  • 定义 setupPhotoSelectorView 方法 准备照片选择器视图

    private func setupPhotoSelectorView() {
      let photoSelectorView: UIView = photoSelectorVC.view
      self.view.addSubview(photoSelectorView)
    
      // 设置约束
      photoSelectorView.translatesAutoresizingMaskIntoConstraints = false
      let viewDict = ["psv" : photoSelectorView]
    
      // 左右和父控件重合
      view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[psv]-0-|", options: [], metrics: nil, views: viewDict))
    
      // 底部和父控件底部重合
      view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[psv]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewDict))
    
      // 高度等于父控件高度0.6
      view.addConstraint(NSLayoutConstraint(item: photoSelectorView, attribute: .height, relatedBy: .equal, toItem: view, attribute: .height, multiplier: 0.6, constant: 0))
    }
    
  • 调用 setupPhotoSelectorView
  • 发现 toolBar照片选择器 视图挡住了
  • 将照片选择器的 view 添加到 toolBar 下方

    self.view.insertSubview(photoSelectorView, belowSubview: toolBar)
    
  • 点击加号按钮选择一张图片,发现 照片选择控制器 不见了,控制台出现:

    Presenting view controllers on detached view controllers is discouraged
    
  • photoSelectorVC 添加为 当前控制器的子控制器,解决问题
    self.addChildViewController(photoSelectorVC)
    
  • 发现一进入撰写微博界面,照片选择器就显示出来.需要先隐藏,等用户点击选择图片时再显示出来

    • HMComposeViewController 定义 照片选择器视图底部约束 属性
      /// 照片选择器视图底部约束
      private var photoSelectorViewBottomCons: NSLayoutConstraint?
      
    • 修改 setupPhotoSelectorView 方法中照片选择视图顶部父控件底部

      private func setupPhotoSelectorView() {
        let photoSelectorView: UIView = photoSelectorVC.view
        self.view.insertSubview(photoSelectorView, belowSubview: toolBar)
        self.addChildViewController(photoSelectorVC)
      
        // 设置约束
        photoSelectorView.translatesAutoresizingMaskIntoConstraints = false
        let viewDict = ["psv" : photoSelectorView]
      
        // 左右和父控件重合
        view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[psv]-0-|", options: [], metrics: nil, views: viewDict))
      
        // 底部和父控件底部重合
        let height = UIScreen.height * 0.6
        photoSelectorViewBottomCons = NSLayoutConstraint(item: photoSelectorView, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: height)
        view.addConstraint(photoSelectorViewBottomCons!)
      
        // 高度等于父控件高度0.6
        view.addConstraint(NSLayoutConstraint(item: photoSelectorView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height))
      }
      
    • 在选择照片方法 picture 中,将选择照片视图显示出来,将键盘隐藏掉

      // MARK: - toolBar item 点击事件
      /// 点击选择照片,弹出选择照片视图
      func picture() {
        // 显示 照片选择器
        self.photoSelectorViewBottomCons?.constant = 0
      
        // 隐藏键盘
        textView.resignFirstResponder()
      
        UIView.animate(withDuration: 0.25) { () -> Void in
            self.view.layoutIfNeeded()
        }
      }
      
    • viewDidAppear 方法里面判断如果选择照片视图正在显示,就不呼出键盘

      override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
      
        if photoSelectorViewBottomCons?.constant != 0 {
            // 主动弹出键盘
            textView.becomeFirstResponder()
        }
      }
      

results matching ""

    No results matching ""