[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:4];
[UIView setAnimationDuration:5];
navigation.frame = CGRectOffset(navigation.frame, 0, 430);
[UIView commitAnimations];

El bloque de código anterior funciona bien cuando se llama manualmente en la función viewDidLoad o con el toque de un botón. Pero cuando trato de llamar a ese bloque dentro de una función de selector como la siguiente, la animación no tiene efecto. El objeto salta a su posición. ¿Qué causaría eso?

if ([delegate respondsToSelector:@selector(carouselDidEndScrollingAnimation:)])
{
    [delegate carouselDidEndScrollingAnimation:self];
}


- (void) carouselDidEndScrollingAnimation:(iCarousel *)carousel{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:5];
    navigation.frame = CGRectOffset(navigation.frame, 0, 430);
    [UIView commitAnimations];
}

icarousel github

0
ymutlu 2 dic. 2011 a las 13:51

1 respuesta

La mejor respuesta

Todavía no conozco el problema real, pero

[self performSelector:@selector(makeAnim) withObject:nil afterDelay:0.0001];

Resuelto mi problema

La esperanza ayuda a cualquiera.

Todavía necesita una mejor solución.

0
Wenfang Du 15 jul. 2021 a las 14:58
1
Creo que encontrará que un retraso de 0 probablemente funcione igual de bien. Lo que hace el código es retrasar el efecto hasta el siguiente ciclo de actualización de la pantalla (~ 1/60 de segundo), lo que probablemente evita que se interfiera con cualquier otra animación que esté en curso.
 – 
Nick Lockwood
14 dic. 2011 a las 16:59