guidelines buttons iphone ios uiscrollview core-animation

iphone - buttons - Animar el desplazamiento de UIScrollView con CoreAnimation



ios web view (4)

Deberías leer sobre propiedades animables, Programación iOS 5

De hecho, cuando intentas animar capas, Apple da un conjunto de propiedades que se pueden animar, pero no estás limitado a este conjunto. Puedes animar lo que quieras.

En todos los casos, no debe usar kCAFillModeForwards porque le pedirá al dispositivo que vuelva a dibujar para siempre la última capa de presentación que se usó para la animación, en lugar de usar una representación en caché de la capa.

Entonces, la forma en que podría lograr tal cosa sería definiendo una capa específica suya en la que la propiedad contentOffset se defina como animable. Y para poder trabajar, debe comenzar por verificar qué tipo de clase de capa superior utiliza una vista de desplazamiento, de modo que, al crear una subclase y establecer la propiedad deseada ( contentOffset ) animatable, y hacer una subclase de su vista de desplazamiento estableciendo esta capa como la parte superior Capa de la vista de desplazamiento, posiblemente podría lograr lo que está tratando de hacer.

¡Esto es teoría!

Pero esto es lo que intentaría. Busca este método y su comportamiento e intenciones.

+ (BOOL)needsDisplayForKey:(NSString *)key

Otra cosa que podrías leer es este ejemplo de inicio . ¡Pero esto también significa que debes volver a dibujar tu uiscrollview por ti mismo!

Lo siento por una gran pregunta, la pregunta real está en negrita en la parte inferior, ahora una explicación.

Estoy usando CoreAnimation en mi proyecto para animar algunos objetos que se mueven así.

CABasicAnimation *moveAnimation; moveAnimation=[CABasicAnimation animationWithKeyPath:@"position"]; moveAnimation.duration = 2.0; moveAnimation.repeatCount=1; moveAnimation.autoreverses=NO; moveAnimation.delegate = self; moveAnimation.fromValue = [NSValue valueWithCGPoint:[crawler.layer position]]; moveAnimation.fillMode = kCAFillModeForwards; moveAnimation.removedOnCompletion = NO; CGPoint p; moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)]; [crawler.layer addAnimation:moveAnimation forKey:@"moveAnimation"];

Y ahora necesito animar el desplazamiento de algunos UIScrollView. No puedo usar setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated método setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated , porque no puede personalizar la duración de la animación.

Puedo hacerlo asi

CGContextRef context = UIGraphicsGetCurrentContext(); [UIView beginAnimations:nil context:context]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [UIView setAnimationDuration:2]; [UIView setAnimationDelegate:self]; scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x + 200, scrollView.contentOffset.y); [UIView commitAnimations];

pero no es CoreAnimation, y creo que usar 2 tipos diferentes de técnicas de animación en una aplicación no es una buena práctica.

¿Hay alguna forma de usar un CoreAnimation para animar el desplazamiento del contenido de UIScrollView a un punto personalizado con una duración de animación personalizada? PD Perdón por el mal inglés.


No creo que puedas animar el punto con CoreAnimation.

Pero puedes probar setContentOffset:animated: es el método que estás buscando?

Puedes transformar solo las siguientes propiedades de UIView

  • cuadro
  • límites
  • centrar
  • transformar
  • alfa
  • color de fondo
  • contentStretch

Más información de CoreAnimation sobre la CoreAnimation de la animación de la documentación de Apple.


Podrías usar:

[UIView animateWithDuration:duration animations:^ { [scrollView setContentOffset:destination animated:NO]; }];

Puede establecer la duración de la animación de esta manera.


[UIScrollViewNameHere setContentOffset:CGPointMake(x value of where you want to move to, y value of where you want to move to) animated:YES];

por ejemplo:

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(4, 2, 2341, 412)]; [scroll setContentOffset:CGPointMake(320, 0) animated:YES];