作为一种快捷方式(绝对没有必要),我的视图上有一个 UIPanGestureRecognizer ,允许用户上下滑动手指以快速设置一个值,但我无法完全实现这一点。
我想让它向上或向下平移一定距离按比例增加或减少值。
我尝试使用translationInView:
,但它似乎只更新了几次,除非我非常缓慢地平移,除非我使用错误。
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint velocity = [recognizer velocityInView:recognizer.view];
NSNumber *WPM = [[NSUserDefaults standardUserDefaults] objectForKey:@"WPM"];
// If user is panning upward
if (velocity.y < 0) {
CGPoint translation = [recognizer translationInView:recognizer.view];
if (fmodf(translation.y, 10) == 0) {
WPM = @([WPM intValue] + 5);
[[NSUserDefaults standardUserDefaults] setObject:WPM forKey:@"WPM"];
NSLog(@"%@", WPM);
}
}
// If user is panning downward
else if (velocity.y > 0) {
CGPoint translation = [recognizer translationInView:recognizer.view];
if (fmodf(translation.y, 10) == 0) {
WPM = @([WPM intValue] - 5);
[[NSUserDefaults standardUserDefaults] setObject:WPM forKey:@"WPM"];
NSLog(@"%@", WPM);
}
}
}
如果我缓慢拖动,变量的值会相对快速地攀升,但如果我将手指快速向上滑动屏幕,它几乎不会调整值。我想要与此完全相反的;慢速运动可以进行精细控制,而快速运动可以更快地改变。
我将如何执行此操作?它工作得不是很好。