私はちょうど私のアプリの一つでこれを実装する必要がありました。
ビュー全体をカバーするボタンを追加してこのボタンを機能させました。このボタンをタップするとVCがトリガーされます。
ボタンが追加されたら、カスタムビューを上に追加できます。
これまでのところ、うまく機能しているようです。あなたはカスタムビューの下で目に見えないボタンを置くことを確認し、ストーリーボードを使用している場合
以下の私のコード
//—————————————————————————————
// MARK: View Life Cycle
//—————————————————————————————
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.clear //VC view background transparent
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//Animate blackView opacity to 1 to give some depth
UIView.animate(withDuration: 0.4, delay: 0.2, options: .curveEaseInOut, animations: {
self.blackView.alpha = 1
})
}
//————————————————
// MARK: Setup UI
//————————————————
let blackView: UIView = {
let view = UIView()
view.alpha = 0.0
view.backgroundColor = UIColor.black.withAlphaComponent(0.6)
return view
}()
//Invisible button which covers the entire view that can be tapped
lazy var dismissLayerBtn: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(tapToDismiss), for: .touchUpInside)
return btn
}()
@objc func tapToDismiss() {
print("tapToDimiss")
self.dismiss(animated: true, completion: nil)
}
let milestonePickerView: MilestonePickerView = {
let view = MilestonePickerView(frame: .zero)
return view
}()
func setupUI() {
view.addSubview(blackView)
view.addSubview(dismissLayerBtn)
view.addSubview(milestonePickerView) //Important to add the customView after the button.
blackView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
dismissLayerBtn.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
milestonePickerView.anchor(top: nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 0, paddingLeft: 20, paddingBottom: 40, paddingRight: 20, width: 0, height: 400)
//I'm using a custom extension to setup constraints (anchors)
}
(私は、プログラム的に何のストーリーボードを全力を尽くすません)。
こちらがお役に立てば幸いです。
hmm ...私は決してその財産を使用したことがないので、それを理解できなかった可能性があります。D 私はそれを試してみます。あなたにフィードバックします。 –
それはうまくいきませんでした。そのプロパティを何らかの形で設定すると、ジェスチャ認識機能は決して起動しません。 ビューはトップビュー階層にないので、ユーザーは利用できないと考えるかもしれません。 提示されたビューとは独立して、画面上の任意の場所でタッチを検出する方法があるはずです。タッチ位置が提示されたポップアップよりも上にあるかどうかを確認してから、いつ解消するかを知っていました –