Верхний и нижний край Жесты триггера 20 пикселей с экрана Edge.
По умолчанию строка состояния является видимой и занимает верхнее 20-пиксельное пространство, поэтому вы должны скрывать строку состояния для использования этих (верхних/ботов) UIScreenEdgePanGestureRecognizers, иначе делегат не будет вызван.
Шаг1:
Шаг 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.
}
}
Спасибо, удивительно это работает для обоих краев. Я не полностью удовлетворен, потому что мне нужно избавиться от строки состояния. Но если это единственный способ, что я могу сделать ... –
Я приму этот ответ через несколько дней, если никто не предложит ничего лучше. –
Если вы действительно хотите иметь строку состояния, я считаю, что вам нужно сделать свою собственную систему отслеживания событий касания (используя touchBegan и т. Д.). – Pierre