ショートカットとして (決して必要ではありません)、ビューに 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);
}
}
}
ゆっくりドラッグすると、変数の値は比較的速く上昇しますが、画面上で指を非常に速くスライドさせると、値はほとんど調整されません。これとは正反対のことが必要です。ゆっくりとした動きは細かい制御を可能にし、速い動きは素早い変化を可能にします。
これを実装するにはどうすればよいですか?このままではうまく機能しません。