2013-04-14 1 views
0

J'essaie de créer une application iOS avec des blocs flottant sur l'écran (UIViews). Je les ai flottant sur l'écran mais je veux aussi que l'utilisateur soit capable de les déplacer sur l'axe des x quand ils tombent. J'ai essayé de le faire avec le code ci-dessous mais ils tombent juste et ne bougent pas de gauche à droite. Mon problème est que j'essaie de le déplacer avec mon doigt de gauche à droite car il bouge déjà en ville. Comment puis-je adapter le code ci-dessous pour travailler?Déplace UIView de gauche à droite tout en descendant l'écran

Remarque: J'ai été capable de déplacer les vues de gauche à droite sans les déplacer vers le bas de l'écran et j'ai été en mesure de les déplacer vers le bas de l'écran sans les déplacer de gauche à droite. Le problème se pose lorsque je combine les deux.

ANIMATION POUR Y AXIS

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:letView.speed]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

letView.layer.frame = CGRectMake(letView.layer.frame.origin.x, [[UIScreen mainScreen] bounds].size.height, letView.layer.frame.size.width, letView.layer.frame.size.height); 

[UIView commitAnimations]; 

ANIMATION POUR TOUCHER

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    //Goes through an array of views to see which one to move 
    for (LetterView * view in _viewArray) { 
     if (CGRectContainsPoint(view.frame, touchLocation)) { 
      dragging = YES; 
      currentDragView = view; 
      [currentDragView.layer removeAllAnimations]; 
     } 
    } 
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    if (dragging) { 
     CGPoint location = touchLocation; 
     currentDragView.center = CGPointMake(location.x, currentDragView.center.y); 
    } 
} 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    dragging = NO; 
    [self checkForCorrectWord]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:currentDragView.speed]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
    currentDragView 
    .layer.frame = CGRectMake(currentDragView.layer.frame.origin.x, [[UIScreen mainScreen] bounds].size.height, currentDragView.layer.frame.size.width, currentDragView.layer.frame.size.height); 

    [UIView commitAnimations]; 
} 
+0

Avez-vous débogué pour vérifier que votre 'CGRectContainsPoint' est correspondant? Les vues de _viewArray sont-elles toutes des sous-classes directes de self.view? – Wain

+0

J'ai été capable de déplacer les vues de gauche à droite sans les déplacer vers le bas de l'écran et j'ai été capable de les déplacer vers le bas de l'écran sans les déplacer. Le problème se pose lorsque je combine les deux. – BDGapps

+0

Comment fonctionne l'animation sur l'écran? Votre code de manipulation tactile supprime toutes les animations du calque de vue tactile. Votre question ne donne vraiment que des détails sur la moitié de l'information. – Wain

Répondre

2

J'ai un projet de démonstration qui vous montre comment faire une animation « bateau » bas de l'écran dans un s- courbe, comme ceci:

enter image description here

La solution I utilise est de m ake animation d'image-clé (en fait, il s'agit d'une animation d'image-clé faisant partie d'une animation groupée, mais vous n'avez pas besoin du reste de l'animation groupée: c'est l'animation d'images-clés. Peut-être pourriez-vous adapter ce que je fais, en le modifiant à vos propres fins?

Le code est disponible en téléchargement ici:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch17p501groupedAnimation

Il est discuté en détail dans mon livre. animations en général: images clés

http://www.apeth.com/iOSBook/ch17.html#_keyframe_animation

Cet exemple particulier:

http://www.apeth.com/iOSBook/ch17.html#_grouped_animations

+0

Mon problème est de le déplacer avec mon doigt alors qu'il se déplace sur l'écran. – BDGapps

+0

Désolé, mais si vous le déplacez avec votre doigt, vous n'utiliserez pas du tout d'animation. Vous feriez juste la vue suivre le doigt (trivial avec un UIPanGestureRecognizer). – matt

+0

Ou dites-vous que vous voulez que la vue soit touchable pendant qu'elle est animée? C'est un problème * très * difficile, car pendant l'animation, une vue n'est pas réellement située à l'endroit où vous la voyez. – matt

Questions connexes