顶部和底部边缘手势从屏幕边缘触发20像素。
默认情况下,状态栏是可见的,并占据前20像素的空间,因此您必须隐藏状态栏以使用这些(顶部/机器人)UIScreenEdgePanGestureRecognizers,否则委托不会被调用。
第一步:
步骤2:
添加以下代码:
ViewController.h
@interface ViewController : UIViewController<UIGestureRecognizerDelegate>
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
UIScreenEdgePanGestureRecognizer *topEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleTopEdgeGesture:)];
topEdgeGesture.edges = UIRectEdgeTop; //UIRectEdgeBottom
topEdgeGesture.delegate = self;
[self.view addGestureRecognizer:topEdgeGesture];
}
- (BOOL) prefersStatusBarHidden
{
return YES;
}
- (void)handleTopEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture
{
NSLog(@"TOP");
}
斯威夫特:
class ViewController: UIViewController,UIGestureRecognizerDelegate {
override func viewDidLoad()
{
super.viewDidLoad()
var edgeGesture : UIScreenEdgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action:"handleTopEdgeGesture:")
edgeGesture.edges = UIRectEdge.Top
edgeGesture.delegate = self
self.view.addGestureRecognizer(edgeGesture)
}
func handleTopEdgeGesture(gesture:UIScreenEdgePanGestureRecognizer)
{
println("TOP")
}
override func prefersStatusBarHidden() -> Bool
{
return true
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
谢谢,令人惊讶的是同时适用于边缘。我不完全满意,因为我必须摆脱状态栏。但如果是唯一的方法,我该怎么做...... – 2014-09-04 10:06:33
如果没有人提出任何更好的建议,我会在几天内接受此答案。 – 2014-09-04 10:07:46
如果你真的想拥有状态栏,我相信你必须做你自己的触摸事件跟踪系统(使用touchBegan等)。 – Pierre 2014-09-04 12:05:08