我有一个特定的UIViewController,我想阻止iOS完成的idleTimer处理。我知道我可以设置:UIApplication.shared.isIdleTimerDisabled = true
但是,我希望能够设置一个计时器,在一段固定的时间后重新启用正常的系统空闲计时器处理,这样我就可以保持屏幕开启一段时间。应用程序的性质使您可以打开视图并将其用于参考/阅读很长一段时间。
关键点是我希望每次用户触摸屏幕或与设备交互时重启计时器。因此,我需要能够检测用户是否做了任何事情,以便我可以休息时间。
我试图覆盖控制器中的touchesEnded方法,但测试显示该方法从未被调用过。任何想法都会受到欢迎(快速3:)
答案 0 :(得分:0)
Swift 3.0: -
需要在没有IBOutlet
的情况下检测特定视图的触摸,然后选择该特定UIView
然后转到Attributes Inspector -> View -> tag
并将Integer
设置为标记,无论需要什么。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let tag = touch?.view?.tag
if tag == 1{
//Do More....
}else{
//......
}
}
如果您需要查看IBOutlet
,请执行以下操作。
此处@IBOutlet var diamondView: UIView!
if touch?.view == self.diamondView{
//Do More....
}else{
//......
}
更新:滚动视图
如果您需要检测滚动视图的触摸,请使用UITapGestureRecognizer
。通过故事板拖放到UIViewController
并将delegate
和gestureRecognizers
设置为scroll view
到UITapGestureRecognizer
。之后,只需为UITapGestureRecognizer
创建操作,如下面的屏幕截图所示。
以编程方式添加UITapGesture:
同样下面的代码工作正常,不需要像上面的截图一样。
@IBOutlet var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.actionTapOnScrollView(sender:)))
self.scrollView.addGestureRecognizer(tapGesture)
}
@objc private func actionTapOnScrollView(sender:UITapGestureRecognizer){
print("user Touched")
}
答案 1 :(得分:0)
最后,我通过对@ RAJAMOHAN-S建议的复合解决方案解决了这个问题。
我在控制器视图中添加了UIGestureRecognizer
。使用此功能,如果视图中的任何位置有一个水龙头,我可以选择重置我的计时器。
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(viewTappedHandler)))
viewTappedHandler
方法设置我需要的计时器。
我通过将UIController
协议添加到控制器的类声明中,使UIScrollView
成为UIScrollViewDelegate
的委托。
然后我实施了:scrollViewWillBeginDragging(_ scrollView: UIScrollView)
并再次设定时间。这会在滚动视图中拾取点击手势未拾取的动作。
最后,因为我的滚动视图包含可以打开键盘的其他视图,我还需要注册键盘通知并再次为每次出现设置计时器。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidHide), name: .UIKeyboardDidHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidChange), name: .UIKeyboardDidChangeFrame, object: nil)
我对此并不完全满意,因为没有检测到点击键盘键,但我不认为这是这个应用程序的真正问题。
PS我还删除了键盘上的观察者并清除deinit
上的计时器。