2014-08-29 160 views
0

这是可能实现从顶部(或)边缘UIScreenEdgePanGestureRecognizer处理事件?UIScreenEdgePanGestureRecognizer:顶部和底部边缘

UIScreenEdgePanGestureRecognizer *gestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(userDidPan:)]; 
gestureRecognizer.edges = UIRectEdgeTop; // UIRectEdgeBottom 
[self.view addGestureRecognizer:gestureRecognizer]; 

问候。

回答

2

状态栏必须隐藏起来才能使用。在您的UIViewController中,覆盖 (BOOL)prefersStatusBarHidden()并返回YES。

但是在ios8中(没有在ios7中测试)。当设备方向为左侧风景时,我无法识别底部手势,并且在设备方向为风景右侧时无法识别顶部手势。我正在调查,但看起来像一个bug。

+0

谢谢,令人惊讶的是同时适用于边缘。我不完全满意,因为我必须摆脱状态栏。但如果是唯一的方法,我该怎么做...... – 2014-09-04 10:06:33

+0

如果没有人提出任何更好的建议,我会在几天内接受此答案。 – 2014-09-04 10:07:46

+0

如果你真的想拥有状态栏,我相信你必须做你自己的触摸事件跟踪系统(使用touchBegan等)。 – Pierre 2014-09-04 12:05:08

3

顶部和底部边缘手势从屏幕边缘触发20像素。

默认情况下,状态栏是可见的,并占据前20像素的空间,因此您必须隐藏状态栏以使用这些(顶部/机器人)UIScreenEdgePanGestureRecognizers,否则委托不会被调用。

第一步:

Image

步骤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. 
} 


} 
+0

这是您可以在Pierre的答案中找到的相同想法。但是我没有问过关于拼写错误和细节的问题。 – 2014-09-05 11:37:27

+0

我已经知道this.Past几个月之前我已经面临这个问题。如果这是为你使用,你将使用它,否则离开这个其他人将使用此 – PREMKUMAR 2014-09-05 11:48:05

相关问题