2014-08-29 4 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() и верните ДА.

Однако в ios8 (не тестировалось в ios7). У меня есть некоторые проблемы, когда нижний жест не распознается, когда ориентация устройства - альбомная слева (а верхний жест не распознается, когда ориентация устройства - Пейзаж справа). Я расследую, но выгляжу как ошибка для меня.

+0

Спасибо, удивительно это работает для обоих краев. Я не полностью удовлетворен, потому что мне нужно избавиться от строки состояния. Но если это единственный способ, что я могу сделать ... –

+0

Я приму этот ответ через несколько дней, если никто не предложит ничего лучше. –

+0

Если вы действительно хотите иметь строку состояния, я считаю, что вам нужно сделать свою собственную систему отслеживания событий касания (используя touchBegan и т. Д.). – Pierre

3

Верхний и нижний край Жесты триггера 20 пикселей с экрана Edge.

По умолчанию строка состояния является видимой и занимает верхнее 20-пиксельное пространство, поэтому вы должны скрывать строку состояния для использования этих (верхних/ботов) UIScreenEdgePanGestureRecognizers, иначе делегат не будет вызван.

Шаг1:

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"); 
    } 

Swift:

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

Это та самая идея, которую вы можете найти в ответе Пьера. Но с опечатками и деталями я не спрашивал. –

+0

Я уже знаю об этом. За несколько месяцев до этого я уже столкнулся с этой проблемой. Если это используется для вас, вы будете использовать его, иначе остальные люди будут использовать это – PREMKUMAR