我的应用程序中有自定义视图,可以由用户滚动.但是,此视图不会从UIScrollView继承.现在我希望用户能够将此视图滚动到顶部,就像任何其他可滚动视图允许的那样.我认为没有直接的方法可以做到这一点.
Google提出了一个解决方案:http://cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html这不再适用于iOS 4.x. 那是不行的.
我有想法创建一个scrollview并将其保存在某个地方,只是为了捕获它的通知然后将它们转发给我的控件.这不是解决我的问题的好方法,所以我正在寻找"更清洁"的解决方案.我喜欢前面提到的UIApplication子类链接的一般方法.但是什么API可以给我可靠的信息?
有什么想法,帮助等......?
编辑:我不喜欢我当前解决方案的另一件事是它只有在当前视图没有任何滚动视图时才有效.滚动到顶部的手势只有在周围只有一个滚动视图时才有效.只要将虚拟添加到具有另一个滚动视图的视图(请参阅下面的详细说明),手势就会完全禁用.寻找更好解决方案的另一个原因......
在我的appDelegate中,我重写touchesBegan以检测何时单击状态栏:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
CGPoint location = [[[event allTouches] anyObject] locationInView:kWindow];
CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
if (CGRectContainsPoint(statusBarFrame, location)) {
///do something
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 13之前,此功能有效;在iOS 13上则没有。该方法从不执行。我怎样才能解决这个问题?
我有一个支持iOS 12的应用程序。我正在添加对iOS 13的支持。我有一个视图控制器,当该应用程序进入后台时,它需要执行快速操作。
在iOS 13之前,这非常简单。添加一行,例如:
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad或也许init。
然后添加didEnterBackground方法:
@objc func didEnterBackground() {
// Do my background stuff
}
Run Code Online (Sandbox Code Playgroud)
对于iOS 12及更低版本,这一切都很好。
但是现在有了iOS 13的场景支持,在iOS 13上运行时不会调用我的通知。它仍然可以在iOS 12模拟器/设备上使用。
我需要进行哪些更改?