2013-02-10 5 views
0

Я начал работать над образцом приложения, где у меня есть некоторые объекты (изображения), которые анимируются на UIView. Я хотел бы иметь фоновое изображение, которое также должно анимировать вместе с этими объектами. Две анимации должны происходить одновременно. Фоновое изображение занимает все пространство экрана, а в верхней части этого изображения должны быть анимированы другие изображения. Может ли кто-нибудь помочь мне достичь этого.Анимированное фоновое изображение/слой в iPhone

Я пробовал следующие вещи, упомянутые в ссылке ниже.

for (int i = 0; i < IMAGE_COUNT; i++) 
     [_imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"D%d.png", i]]]; 


    _animatedImages = [[UIImageView alloc] 
         initWithFrame:CGRectMake(
               (SCREEN_WIDTH/2) - (IMAGE_WIDTH/2), 
               (SCREEN_HEIGHT/2) - (IMAGE_HEIGHT/2) + STATUS_BAR_HEIGHT, 
               IMAGE_WIDTH, IMAGE_HEIGHT)]; 

    _animatedImages.animationImages = [NSArray arrayWithArray:_imageArray]; 

    _animatedImages.animationDuration = 1.0; 

    _animatedImages.animationRepeatCount = -1; 

The iPhone Game Background as Video or Animated Image?

Но две анимации происходит независимо друг от друга. Я хотел бы анимировать объекты в верхней части фонового изображения, которые также должны быть анимированы. Если это невозможно, я могу использовать слои или какой-либо другой объект для достижения этого. Пожалуйста, предложите.

+0

http://stackoverflow.com/questions/8112698/ Как сделать-анимацию-использование-images-efficiently-in-ios/17129053 # 17129053 – MoDJ

ответ

0

Кажется, что `UIImageView 'не дает возможности контролировать время начала анимации. Существует такой API, но он находится на платформе CoreAnimation более низкого уровня (которую UIImageView должен использовать в своей реализации ...)

Вы можете повторно реализовать свою собственную анимацию UIImageView.

Затем, чтобы установить различные анимации с относительным временем, см. "How can I chain Core Animations for different Layers one after the other?" и How to group two CABasicAnimation animations and kick them off at the exact same time?.

Поскольку вам не требуется смещение между всеми анимациями слоев, но вы хотите, чтобы они запускались одновременно, вы должны создать CAAnimationGroup и поместить все их с тем же beginTime.

CAMediaTiming протокол (реализован CAAnimation) является довольно Лысый документально - но это часть вас интересует: время ваш основной анимации - Проверьте this post for some API clarification

+0

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

+0

Независимо от того, используете ли вы подклассы UIView (как UIImageView) или непосредственно CALayer, они оба используют CALayers для рисования - так, ДА, вы можете использовать слои ... везде! Идея состоит в том, чтобы по возможности использовать UIKit (более простой API) и погрузиться в CoreAnimation, если вы не можете получить эффект, который вы ищете. Если все ваши анимации определены в API UIKit, вы должны сгруппировать все свои анимации в один «+ UIView animateWithDuration: delay: options: animation:'. Этот метод автоматически создает «CATransaction», которые устанавливают анимации в одном и том же коректрите CoreAnimation: ваши анимации должны быть синхронизированы ... – Vinzzz

Смежные вопросы