Animación dentro de un UIScrollView

Quiero desvanecer una vista mientras se desplaza dentro de una UIScrollview primaria. Cuando comienza la animation de desvanecimiento, la vista de desplazamiento deja de desplazarse. Salta a la position correcta cuando se completa el fundido.

My fade-out se logra con animateWithDuration y los objects de bloque, activados en un cambio de página que detecto en scrollViewWillBeginDragging.

¿Alguien sabe cómo hacer que ambos sucedan simultáneamente? Para ser claro, no estoy 'animando' el desplazamiento UIScrollView, sino que está sucediendo a través de la interacción del usuario con el deslizar.

EDITAR:

Aquí está el código que estoy usando para desvanecer la UIView. Este código está en una class derivada de UIViewController, que es el delegado de un UIScrollView. Cuando el usuario comienza a arrastrar su dedo, quiero desvanecer la subView. Pero cuando el usuario comienza a arrastrar un dedo, la subvista se desvanece y el desplazamiento se detiene. Después de que el subView se haya desvanecido por completo, la vista de desplazamiento se ajustará a la location donde está el dedo del usuario.

-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView { [UIView animateWithDuration:0.5 animations:^ { self.subView.alpha = 0.0f; } completion:^(BOOL finished) { }]; } 

muy interesante … He comprobado esto, y sí, tengo el mismo efecto … Bueno, parece que el animateWithDuration de alguna manera bloquea el hilo principal … lo que no es lógico, y la documentation no dice cualquier cosa al respecto … Sin embargo, hay una solución fácil, algo similar a esto: (he configurado la duración de la animation en 3 para que pueda ver que está funcionando mientras muevo mi vista de desplazamiento 🙂 …)

 [UIView beginAnimations:@"FadeAnimations" context:nil]; [UIView setAnimationDuration:3]; self.subview.alpha = 0.0f; [UIView commitAnimations]; 

Un poco tarde, pero si quieres seguir usando bloques, puedes usar:

animateWithDuration: delay: opciones: animation: completa:

agregue "UIViewAnimationOptionAllowUserInteraction" a las opciones para permitir la interacción mientras se desplaza.

Estoy seguro de que aún tendrás el problema de la demora. Aquí está la mejor manera de explicarlo. Por favor, perdóname de antemano ya que probablemente estoy usando los términos incorrectos. Todas las animaciones deben ejecutarse en el hilo principal. Cuando llama a una animation, iOS primero * P * rocesses luego * R * termina antes de que genere * F * rames. Se parece a esto.

PPPPRRRRFFFFFFFFFFFFFFFFFF

Pero dado que ScrollViews no sabe cuánto time va a durar su animation o cuándo finalizará, tiene que realizar la animation de esta manera.

PRFPRFPRFPRFPRFPRFPRFPRF

Mi teoría es que el retraso que experimentas tiene que ver con estas dos llamadas que chocan en el hilo principal al mismo time. No estoy seguro de cómo resolverías este problema más que con un chip más rápido. Creo que puedes enviar una animation a la CPU y otra a la GPU, pero todavía no estoy tan avanzado en progtwigción.

Sugeriría, ya que la opacidad se basa en los movimientos del dedo del usuario en UIScrollView, utilizando el método de delegado scrollViewDidScroll :. El scrollView pasado como un parámetro se puede usar para verificar el contenido del juego, que es simplemente un CGPoint que indica qué tan lejos está en la vista de contenido del UIScrollView que el usuario ha desplazado. Algo así puede usarse para relacionar la position de desplazamiento con la opacidad de una vista dada en una UIScrollView paginada:

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // The case where I used this, the x-coordinate was relevant. You may be concerned with the y-coordinate--I'm not sure CGFloat percent = ((int)(scrollView.contentOffset.x) % (int)(scrollView.frame.size.width)) / scrollView.frame.size.width; if (percent > 0.0 && percent < 1.0) { // Of course, you can specify your own range of alpha values relevantView.alpha = percent; // You could also create a mathematical function that maps contentOffset to opacity in a different way than this } } 

De acuerdo con la información que todavía no se supone que se publique ampliamente, todas las versiones de iOS 4.x bloquean completamente la interacción del usuario mientras la animation está en progreso.

¿No es interesante, sin embargo, que usted es UITouches, obviamente, todavía están registrados durante la animation? Hmm … tal vez eso sugiere que algo nuevo está llegando en una versión que aún no se ha lanzado.

Es decir, si puede, lea la documentation de iOS 5 Beta sobre los methods de class de UIView.