semanas semana rutinas iniciar gratis freeletics espaƱol dione como aphrodite ios objective-c uiview uiviewanimation

ios - rutinas - freeletics. semana 2



Animar a UIView no funciona como se esperaba (1)

Usando Auto-Layout debería animar sus restricciones, no cambiar el marco de los objetos.

Me he burlado de un ejemplo aproximado de dónde comenzar a usar restricciones, lo que debería resolver su problema

En primer lugar, debe establecer las restricciones de su vista de cesta

Cada objeto debe tener al menos 4 restricciones establecidas para que se establezcan correctamente.

Vea la captura de pantalla a continuación, presionando el ícono de restricciones en la parte inferior de la vista que he elegido para establecer el ancho y alto de la vista, más la restricción de distancia a la izquierda.

Luego tendrá que establecer el espacio en la parte superior de la supervista, ver la segunda captura de pantalla.

Establecer la restricción en la parte superior de la supervista

Una vez que se hayan configurado las restricciones, establezca CTRL y arrastre el espacio superior a la propiedad de superview a su archivo de encabezado, como se muestra en la siguiente captura de pantalla. (deberá establecer sus restricciones dentro de la vista para acomodar su objeto de tabla, etc.),

Ahora que esto se ha configurado, reemplace su código con lo siguiente y debería funcionar bien

-(void)hideBasket{ self.topVerticalSpaceConstraint.constant = -312; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { }];

}

- (void) showBasket {

self.topVerticalSpaceConstraint.constant = 0; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { }];

}

Tenga en cuenta que simplemente he establecido manualmente la cantidad constante aquí al tamaño de la vista ficticia que hice, aunque por supuesto cambiaría esto para que sea del tamaño de su vista, etc.

Recuerde que idealmente, sus vistas / objetos deberían tener sus restricciones establecidas, especialmente UITableview en su vista desplegable. Establecer las restricciones de altura, ancho y espacio superior e izquierdo de la tabla dentro de la UIView será suficiente.

Si desea que su vista esté oculta desde la primera carga, con su viewDidload establezca la restricción en -valueOfHeightOfBasket

Espero que esto ayude.

En mi aplicación, estoy usando un UIView que incluye UITableView , Buttons y Labels . Creó usando Storyboard . Cuando el usuario hace clic en un botón de la barra de navegación, aparecerá UIView con animación desde la parte superior a cierta altura y, si vuelve a hacer clic, oculta el UIView con animación (desde esa altura hasta la parte superior). Lo mismo que UIActionView .

Funciona bien si no hay registros en UITableView . Pero si tiene algún registro, al llamar [self hideBasket] el UIView aparece desde la parte inferior de la vista hacia arriba (No oculto).

// Ocultar código de cesta

-(void)hideBasket{ /*Finished Hiding the Basket [self.view sendSubviewToBack:_shoppingCartView]; [_shoppingCartView setHidden:YES]; _isShoppingCartSeen = NO;*/ CGRect basketFrame = _shoppingCartView.frame; basketFrame.origin.y = -basketFrame.size.height; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ _shoppingCartView.frame = basketFrame; } completion:^(BOOL finished) { // Finished Hiding the Basket //[self.view sendSubviewToBack:_shoppingCartView]; // [_shoppingCartView setHidden:YES]; _isShoppingCartSeen = NO; }];

// Mostrar código de cesta

-(void)showBasket{ /*[self.view bringSubviewToFront:_shoppingCartView]; [_shoppingCartView setHidden:NO]; _isShoppingCartSeen = YES;*/ CGRect basketFrame = _shoppingCartView.frame; basketFrame.origin.y = 0; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ _shoppingCartView.frame = basketFrame; } completion:^(BOOL finished) { // Finished Showing the Basket [self.view bringSubviewToFront:_shoppingCartView]; [_shoppingCartView setHidden:NO]; _isShoppingCartSeen = YES; }]; }

¿Qué estoy haciendo mal aquí?