0

我有一个特定的 UIViewController 我想阻止 iOS 完成的 idleTimer 处理。我知道我可以设置: UIApplication.shared.isIdleTimerDisabled = true 但是,我希望能够设置一个计时器以在固定时间后重新启用正常的系统空闲计时器处理,因此我可以让屏幕保持最短时间。该应用程序的性质是,您可以打开一个视图并将其用于参考/阅读很长时间。

关键点是我希望每次用户触摸屏幕或与设备交互时都重新启动计时器。所以我需要能够检测用户是否做了任何事情,这样我就可以休息了。

我试图覆盖控制器中的 touchesEnded 方法,但测试表明该方法从未被调用。欢迎任何想法(在 swift 3 中:)

4

2 回答 2

1

斯威夫特 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设置delegategestureRecognizers为。之后,只需为如下屏幕截图创建操作。 scroll viewUITapGestureRecognizerUITapGestureRecognizer在此处输入图像描述

以编程方式添加 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")
}
于 2017-07-02T13:59:53.733 回答
0

最后,我通过对@RAJAMOHAN-S 的建议进行复合解决方案来解决这个问题。

  1. UIGestureRecognizer在控制器视图中添加了一个。如果在视图中的任何地方有点击,我可以使用它来获取,从而重置我的计时器。

    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(viewTappedHandler)))

    viewTappedHandler方法设置了我需要的计时器。

  2. 通过将协议添加到控制器的类声明中,我成为了我UIController的代表。UIScrollViewUIScrollViewDelegate

    然后我执行:scrollViewWillBeginDragging(_ scrollView: UIScrollView)并再次设置时间。这会在滚动视图中拾取点击手势未拾取的移动。

  3. 最后,因为我的滚动视图包含可以打开键盘的其他视图,所以我还需要注册键盘通知并再次为每次出现设置计时器。

    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

于 2017-07-03T07:23:22.447 回答