Я столкнулся с точно такой же вещью, и я искал решение. Не существует такой вещи, как необходимое расстояние в UISwipeGestureRecognizer
, но это не все, что вы можете использовать. В итоге я использовал UIPanGestureRecognizer
! Это похоже на суперкласс распознавателя жестов и, конечно, предоставляет больше полезных данных.
В этом классе доступен метод, называемый translationInView:(UIView *)aView
, который возвращает CGPoint , где x & y - общее расстояние по всему жесту панорамирования ! что-то удивительно полезное для нашего запроса! И оно учитывает направление положительными и отрицательными значениями, что означает: y = + 100 -> проведите пальцем вверх 100 пунктов вниз , x = + 100 проведите пальцем слева направо 100 пунктов и т. Д. ...
Что я делаю, это проверяю, панорамировал ли пользователь заданное количество баллов (я искал что-то вроде удара вниз, так что для меня это было y> 150 ), а затем выполняю вещь ...
Вот некоторые выдержки из кода:
-(void)viewDidLoad
{
UIPanGestureRecoginzer *panDown=[[UIPanGestureRecoginzer alloc] initWithTarget:self action:@selector(swipedDown:)];
[self.view addGestureRecognizer:panDown];
}
.
.
.
-(void)swipedDown:(UIPanGestureRecoginzer *)recognizer
{
CGPoint panned=[recognizer translationInView:self.view];
if(panned.y>150){
//swiped down for 150 points
doSomething();
}
}
Это также дает вам скорость кастрюли: velocityInView:
Примечание: вы должны использовать суперпредставление (в большинстве случаев self.view), если вы хотите получить общий эффект панорамирования.
Надеюсь, это поможет: UIPanGestureRecognize Ссылка на класс