专业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() } }
- 在