Mover UIView fuera de la pantalla de izquierda a derecha y traerlo de nuevo desde la izquierda

How can I Move an UIView OFF the screen from left to right and then bring it IN the screen again from left side ?!!

Gracias por adelantado,

preguntado el 28 de mayo de 14 a las 13:05

Are you able to do either of those things in isolation? -

5 Respuestas

All you have to do is animate the x origin position of the view and use the devices screen with to determine how much. So for off screen to the right:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    _yourView.frame = CGRectMake(screenRect.size.width, _yourView.frame.origin.y, _yourView.frame.size.width, _yourView.frame.size.height);
}
                 completion:^(BOOL finished) {
                     //position screen left after animation
                     _yourView.frame = CGRectMake(-screenRect.size.width, _yourView.frame.origin.y, _yourView.frame.size.width, _yourView.frame.size.height);
                 }];

And for on screen go back to 0.0 x-position or whatever your starting point was:

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    _yourView.frame = CGRectMake(0.0, _yourView.frame.origin.y, _yourView.frame.size.width, _yourView.frame.size.height);
}
                 completion:^(BOOL finished) {
                     //do something after animation
                 }];

contestado el 28 de mayo de 14 a las 13:05

To move OFF the screen:

CGRect frame = viewToMove.frame;
frame.origin.x = self.view.frame.size.width;
viewToMove.frame = frame;

To move the view back into the screen:

CGRect frame = viewToMove.frame;
frame.origin.x = 0;
viewToMove.frame = frame;

contestado el 28 de mayo de 14 a las 13:05

That would move it off the screen to the right side. Depending where they want it to move off the screen, they would adjust x or y accordingly. - Lógicosaurio Rex

//Store your view's original rect
UIRect originRect = yourView.frame;

[UIView animateWithDuration:0.25 animations:^{

//create new rect and set its X coord to phone's width
CGrect rect = originRect;
rect.origin.x = self.view.frame.size.width;
yourView.frame = rect;

} completion:^(BOOL finished){

   // when animation finished animating start new animation 
   //to bring your view to its original position

   [UIView animateWithDuration:0.25 animation:^{

   yourView.frame = originRect;

   }];

}];

contestado el 28 de mayo de 14 a las 13:05

With a bit of cleanup, this was the easiest for me. - James Perih

This code will move it to right in 0.3 seconds and then back from left to it's current position again in the next 0.3 seconds.

CGRect backToOriginal = Yourview.frame;
CGRect frameOnRight = CGRectMake ( screenWidth,backToOriginal.origin.y,backToOriginal.frame.size.width,backToOriginal.frame.size.height);

[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ Yourview.frame = frameOnRight; } completion:^(BOOL finished)[UIView setFrame: screenLeft;] [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ Yourview.frame = backToOriginal; }{ }];

There must be errors in this code in terms of syntax since I am not sitting on a MAC right now.

contestado el 28 de mayo de 14 a las 13:05

//To move view to left

[UIView animateWithDuration:0.5
                      delay:1.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^{
                     self.yourView.frame = CGRectMake(distanceToLeft, distanceFromTop, yourView.width, yourView.height);
                     }
                 completion:^(BOOL finished){
                     NSLog(@"Moved to left!");
                 }];

// To move back to original position

[UIView animateWithDuration:0.5
                      delay:1.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^{
                     self.yourView.frame = CGRectMake(originalX, OriginalY, yourView.Width, yourView.height);
                 }
                 completion:^(BOOL finished){
                     NSLog(@"Back to normal!");
                 }];

contestado el 28 de mayo de 14 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.