Прокрутка массива изображений с помощью CABasicAnimation

Мне нужно прокручивать изображения одно за другим. Ниже приведен код, который я использую

_imageView — это UIImageView, а imagesArray — это NSArray с массивом объектов.

   _imageView.animationImages=imagesArray;
   _imageView.animationDuration=10;
    [_imageView startAnimating];
     
    CABasicAnimation *scrollText;
    scrollText=[CABasicAnimation animationWithKeyPath:@"position.x"];
    scrollText.duration = 10.0;
    scrollText.speed= 3; 
    scrollText.repeatCount = 0;
    scrollText.autoreverses = NO;
    
    scrollText.fromValue = [NSNumber numberWithFloat:500];
    scrollText.toValue = [NSNumber numberWithFloat:-200.0];
    
    [[_imageView layer] addAnimation:scrollText forKey:@"scrollTextKey"];

Я вижу, что изображения прокручиваются и меняются одно за другим. Но эти образы меняются независимо. Я хочу изменить изображение по одному, когда оно покидает рамку/экран. Может ли кто-нибудь предложить какую-нибудь идею?


person Perseus    schedule 27.04.2012    source источник


Ответы (1)


Я не совсем уверен, что вы спрашиваете. Я думаю, вы говорите, что хотите создать анимацию, в которой серия изображений начинается в нижней части экрана и анимируется вверх и за пределы экрана.

Для этого вы, вероятно, захотите создать анимацию, которая анимирует изображение из нижней части экрана в верхнюю, а затем зациклить эту анимацию несколько раз с разными изображениями. Что-то вроде этого.

Определите переменную экземпляра imageNumber. Установите его в ноль и вызовите animateImage (ниже), чтобы запустить анимацию.

Код может выглядеть примерно так:

-(void) animateImage;
{
  _imageView.image = [imagesArray objectAtIndex: imageNumber];
  CGPoint imageCenter = _imageView.center;
  imageCenter.y = 500;
  _imageView.center  = imageCenter;
  [UIView animateWithDuration: 10
    delay: 0.0
    options: UIViewAnimationOptionCurveLinear
    animations: 
    ^{
       CGPoint newImageCenter = _imageView.center;
       newImageCenter.y = -200;
       _imageView.center  = imageCenter;
    completion:
    ^{
      imageNumber++;
      if (imageNumber < [imagesArray count])
        [self animateImage];
    }
  ];
}
person Duncan C    schedule 13.05.2012
comment
Спасибо . Это помогло бы мне. Я добился этого, используя CALayer и CABasicAnimation. Я тоже попробую так, очень меньше LOC. Спасибо еще раз. - person Perseus; 14.05.2012
comment
LOC = строки кода? - person Duncan C; 09.04.2016