swift - 滑动动作延迟
问题描述
我在我的应用程序中添加了滑动操作。我有 5 个按钮代表一周中的几天。当我单击一个按钮时,它会更改我的表格视图的数组和一些东西。滑动动作完全相同并且效果很好,但有时在滑动时它会冻结并在几秒钟后再次起作用。这是延迟。
override func viewDidLoad() {
super.viewDidLoad()
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(actionSwipeRight))
rightSwipe.direction = .right
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(actionSwipeLeft))
leftSwipe.direction = .left
view.addGestureRecognizer(rightSwipe)
view.addGestureRecognizer(leftSwipe)
}
和刷卡码
// s'éxécute lorsque qu'un swipe vers la droite est effectué
@objc private func actionSwipeRight() {
print("swipe right")
switch self.selectedDayinHoraire {
case "LUNDI" :
return
case "MARDI" :
changeDay(for: "LUNDI")
case "MERCREDI" :
changeDay(for: "MARDI")
case "JEUDI" :
changeDay(for: "MERCREDI")
case "VENDREDI" :
changeDay(for: "JEUDI")
default: break
}
}
// s'éxécute lorsque qu'un swipe vers la gauche est effectué
@objc private func actionSwipeLeft() {
print("swipe left")
switch self.selectedDayinHoraire {
case "LUNDI" :
changeDay(for: "MARDI")
case "MARDI" :
changeDay(for: "MERCREDI")
case "MERCREDI" :
changeDay(for: "JEUDI")
case "JEUDI" :
changeDay(for: "VENDREDI")
case "VENDREDI" :
return
default: break
}
}
func changeDay(for day : String) {
switch day {
case "LUNDI" :
self.menuSelectionné(btn: self.btnLundi)
self.LabelDynamiqueJour.text = " horaire du lundi"
self.selectedDayinHoraire = "LUNDI"
case "MARDI" :
self.menuSelectionné(btn: self.btnMardi)
self.LabelDynamiqueJour.text = " horaire du Mardi"
self.selectedDayinHoraire = "MARDI"
case "MERCREDI" :
self.menuSelectionné(btn: self.btnMercredi)
self.LabelDynamiqueJour.text = " horaire du Mercredi"
self.selectedDayinHoraire = "MERCREDI"
case "JEUDI" :
self.menuSelectionné(btn: self.btnJeudi)
self.LabelDynamiqueJour.text = " horaire du Jeudi"
self.selectedDayinHoraire = "JEUDI"
case "VENDREDI" :
self.menuSelectionné(btn: self.btnVendredi)
self.LabelDynamiqueJour.text = " horaire du vendredi"
self.selectedDayinHoraire = "VENDREDI"
default: break
}
tableviewHoraire.reloadData()
}
按钮动作:
@IBAction func btnLun(_ sender: UIButton) {
changeDay(for: "LUNDI")
}
@IBAction func btnMar(_ sender: UIButton) {
changeDay(for: "MARDI")
}
@IBAction func btnMer(_ sender: UIButton) {
changeDay(for: "MERCREDI")
}
@IBAction func btnJeu(_ sender: UIButton) {
changeDay(for: "JEUDI")
}
@IBAction func btnVen(_ sender: UIButton) {
changeDay(for: "VENDREDI")
}
你可以看到滑动动作也一样,但有时它会冻结,如果你愿意,可以自己测试,问题来自 Horaire 视图。https://github.com/CedricLnx/School-Companion
解决方案
将您的 Horaire 类设置为UIGestureRecognizerDelegate
.
class Horaire: ViewController, UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate {
将每个 Swipe 的代理设置为 self。
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(actionSwipeRight))
rightSwipe.direction = .right
rightSwipe.delegate = self
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(actionSwipeLeft))
leftSwipe.direction = .left
leftSwipe.delegate = self
添加 UIGestureRecognizerDelegate 函数。
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
正如Apple Docs中所解释的, shouldRecognizeSimultaneouslyWith 允许两个或多个手势同时工作。在这种情况下,它应该允许在 self.view 和 tableView 上将单次触摸注册为滑动。
推荐阅读
- ios - 如何在 swift UI 中单击按钮时从 swift UI 导航到情节提要?
- wicket - 为什么不使用 Wicket 8 调用 AjaxEventBehavior onEvent(使用 Wicket 7 可以正常工作)?
- mysql - MYsql更新多行顺序列中的序列号
- reactjs - 类型“字符串”不可分配给类型“从不”并且类型“未知”不可分配给反应打字稿中的类型“从不”错误
- powershell-5.0 - 使用powershell在文件中进行字符串处理
- angular - Angular 中的可选链
- kotlin - 当我只想执行 kotlin 脚本时,为什么 IntelliJ IDEA 正在构建 maven 项目?
- python - 异常处理 - 列表索引超出范围
- python - 我应该如何使用 asyncio 设计并发管道?
- firebase - 断言失败:第 133 行第 12 行:'file.absolute.existsSync()':不正确