2012-04-27 1 views
0

Мне нужно прокручивать изображения один за другим. Ниже приведен код, который я используюПрокрутка массива изображений с помощью 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"]; 

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

ответ

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]; 
    } 
    ]; 
} 
+0

Спасибо. Это поможет мне. Я достиг этого, используя CALayer и CABasicAnimation. Я тоже попробую, слишком мало LOC. Еще раз спасибо. – Perseus

+0

LOC = Линии кода? –