状況
最前面のViewController
を取得する記事はたくさんあるけど
View
に関しては見つからなかったので僕なりのやり方を残しておきます
対策
GirlsView
はcustomViewです
流れ
frontView
に存在するViewのなかで最後に配置したView(最前面のView)を入れておく->右スワイプする->ViewとViewの配列を消去する
Viewを配置するたびにzPosition
を上げている-> 最後に配置したView = 最前面のView になります
private func setSwipe(girlsView: GirlsView) {
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didSwipe(sender:)))
rightSwipe.direction = .right
girlsView.addGestureRecognizer(rightSwipe)
}
@objc func didSwipe(sender: UISwipeGestureRecognizer) {
if sender.direction.contains(.right) {
print("Right!")
getFrontView().removeFromSuperview()
girlsViewArray.removeLast()
}
}
private func getFrontView() -> GirlsView {
var frontView: GirlsView?
Array(0..<girlsViewArray.count).forEach {
if let view: GirlsView? = girlsViewArray[$0] {
frontView = view!
}
}
return frontView!
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
Array(0..<girlsViewArray.count).forEach {
view.addSubview(girlsViewArray[$0]) //$0は0 ~ girlsViewArray-1
girlsViewArray[$0].layer.zPosition = CGFloat($0) + 1.0
setSwipe(girlsView: girlsViewArray[$0])
//省略
}
}