traductor traduccion titles palabra oraciones online name linguee lin ingles google contrato con and iphone ios objective-c cgaffinetransform uianimation

iphone - traduccion - traductor le



Traducción de iOS y animación a escala. (4)

Estoy trabajando en la animación de UIButton donde:

El UIButton se establece en la parte inferior central de la pantalla y se ajusta a un tamaño pequeño

_menuBtn.transform = CGAffineTransformMakeScale(0.1f, 0.1f);

Cuando se inicia la aplicación, debe moverse hacia la parte inferior izquierda de la pantalla a medida que aumenta su tamaño original.

- (void)viewDidLoad { [super viewDidLoad]; _menuBtn.frame = CGRectMake(160, 513, 30, 30); _menuBtn.superview.frame = CGRectMake(160, 513, 30, 30); _menuBtn.transform = CGAffineTransformMakeScale(0.1f, 0.1f); NSLog(@"_menuBtn: %@ ; _menuBtn.superview: %@", _menuBtn, _menuBtn.superview); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(-200.0f,0.0f); _menuBtn.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); [UIView commitAnimations]; }

problema

Cuando comienza la animación, el botón comienza a moverse desde la parte inferior derecha de la pantalla y no en el centro inferior donde está y debería estar. Alguna ayuda ?

Resultado del registro

NSLog(@"%@", _myBtn); 2013-08-14 09:22:38.913 GJCoolNavi[339:c07] <UIButton: 0x813ea30; frame = (0 0; 0 0); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x813eaf0>>

eso es antes de hacer la animación ... y el resultado después de la animación es:

2013-08-14 09:30:25.719 GJCoolNavi[612:c07] <UIButton: 0x71206d0; frame = (160 294; 0 0); opaque = NO; autoresize = TM+BM; animations = { transform=<CABasicAnimation: 0x7536a80>; position=<CABasicAnimation: 0x7537dd0>; }; layer = <CALayer: 0x7120790>>


¿Por qué no haces esto ...

_menuBtn.transform = CGAffineTransformMakeScale(0.1, 0.1); [UIView animateWithDuration:5.0 options:UIViewAnimationOptionCurveEaseOut animations:^(){ _menuBtn.transform = CGAffineTransformMakeScale(1.0, 1.0); _menuBtn.center = self.view.center; } completion:nil];

Evitaría mover cosas usando una transformación. Cambiar el marco en su lugar.

EDITAR

- (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // for convenience I''m pulling these values out in to variables. float buttonWidth = _menuBtn.frame.size.width; float buttonHeight = _menuBtn.frame.size.height; float viewWidth = self.view.frame.size.width; float viewHeight = self.view.frame.size.height; // set the button frame to be the bottom center // note you shouldn''t have to do this as Interface Builder should already place it there. // place the button in the horizontal center and 20 points from the bottom of the view. _menuBtn.frame = CGRectMake((viewWidth - buttonWidth) * 0.5, viewHeight - buttonHeight - 20, buttonWidth, buttonHeight); // scale the button down before the animation... _menuBtn.transform = CGAffineTransformMakeScale(0.1, 0.1); // now animate the view... [UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ _menuBtn.transform = CGAffineTransformIdentity; _menuBtn.frame = CGRectMake(viewWidth - buttonWidth - 20, viewHeight - buttonHeight - 20, buttonWidth, buttonHeight); } completion:nil]; }

Intenta esto y déjame saber que pasa.


Este fenómeno indica que el marco original de su botón es incorrecto, probablemente debido a su cambio de tamaño automático. Intente establecer su marco en la parte inferior central antes de comenzar la animación.

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; _menuBtn.superview.frame = CGRectMake(0, 513, 320, 30); // This is a quick and dirty solution to make sure your button''s superview is in the right place. You probably don''t want to do this and are more likely to review your view hierarchy. _menuBtn.frame = CGRectMake(145, 0, 30, 30); // Set the frame to the bottom center, please ensure that _menuBtn''s transform hasn''t been changed before this step _menuBtn.transform = CGAffineTransformMakeScale(0.1f, 0.1f); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(-200.0f,0.0f); _menuBtn.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); [UIView commitAnimations]; }


Esto ha resuelto un problema similar.

Aplicar una animación (UIButton) .imageView.

[UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(-200.0f,0.0f); _menuBtn.imageView.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); [UIView commitAnimations];


He utilizado su código y su movimiento desde la parte inferior central a la parte inferior izquierda perfectamente. Puede ser que tu supervisión no sea adecuada. Por favor, compruebe.