J'ai une image dans une vue qui contient une grille 9x9. Je veux déplacer l'objet le long de la grille, qui est composée d'un tableau de colonnes (9) à l'intérieur d'un autre tableau (9), en utilisant un mouvement de panoramique. L'image doit se déplacer de carré à carré dans la grille. Le code ci-dessous est ce que j'ai jusqu'ici. Le problème est que l'image saute de 3 à 4 carrés à la fois. C'est beaucoup trop sensible. Quelqu'un peut-il nous éclairer sur le pourquoi et faire des suggestions sur ce qu'il faut faire pour résoudre ce problème de sensibilité?iPhone: Panoramique pour déplacer une image à l'aide de touchesBegan, touchesMoved et touchEnded
Code qui fonctionne:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
gestureStartPoint = [touch locationInView:self.view];
// Do not move if touch is off the grid
if (gestureStartPoint.x < 0 ||
gestureStartPoint.x > 450 ||
gestureStartPoint.y < 0 ||
gestureStartPoint.y > 450) {
canMove = NO;
}else {
canMove = YES;
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
double thresholdX = 50;
if (canMove) {
deltaX = (int)(currentPosition.x - gestureStartPoint.x);
if (deltaX > thresholdX) {
deltaX = 0;
if([self blockCanMoveXDir:1]){
[cBlock movX:1];
}
// Resets start point
gestureStartPoint = currentPosition;
NSLog(@"-------------> Block Moved");
} else if(deltaX < 0 && fabs(deltaX) > thresholdX) {
deltaX = 0;
if([self blockCanMoveXDir:-1]){
[cBlock movX:-1];
}
gestureStartPoint = currentPosition;
}
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
canMove = NO;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
canMove = NO;
}
J'ai essayé cela et ça bouge beaucoup trop vite. Je crois que touchesMoved est appelé trop souvent. –
Ce n'est pas une question de fréquence à laquelle TouchMoved est appelé. C'est seulement une question de seuil, essayez ceci: if (canMove) { deltaX = (int) (currentPosition.x - gestureStartPoint.x); si (deltaX> thresholdX) { deltaX = 0; // TODO: Déplacer un bloc // Réinitialise le point de départ gestureStartPoint = currentPosition; NSLog (@ "-------------> Bloc déplacé"); } ... VOTRE CODE ... – MaxFish
Ceci est extrêmement proche. Je pense que je l'ai d'ici. Merci beaucoup. –