2016-04-01 3 views
1

Есть ли способ анимации UIImageView справа налево без использования CABasicAnimation? У меня проблемы с этим, и я хотел бы найти другой способ сделать это.Бесконечная анимация анимации бегуна (No SpriteKit)

«Земля» изображение его 1200 (ширина) x 33 (высота), и я хотел бы переместить его справа налево, имитируя бесконечный бегун с бесконечными повторениями.

Как я могу достичь этого без CALayer/CABasicAnimation ?.

Спасибо!

+0

Вы имеете в виду просто переместить UIImageView? –

+0

На самом деле это способ имитировать бесконечную рабочую среду без использования CABasicAnimation. У меня есть актив в UIImageView. – iDeC

+0

, поэтому у вас есть несколько изображений, которые вы хотите использовать в одном UIImageView или у вас есть только одно изображение, и вам нужно переместить UIImageView для достижения желаемого эффекта? –

ответ

1

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

Вы можете переместить ImageView так:

[UIView animateWithDuration:10 
       animations:^{ 

        yourImageView.frame = frame_you_need; 
       } 
       completion:^(BOOL finished){ 

        //start from the very beginning 
        //set initial frame to the image view and run the 
        // animation again 
       }]; 

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

UPDATE

я решил реализовать эту функцию самостоятельно. Вот как моя функция анимации выглядит:

- (void)runView:(UIView *)aView withStartPosition:(CGPoint)startPosition 
{ 
aView.center = startPosition; 

[UIView animateWithDuration:3 
         delay:0 
        options:UIViewAnimationOptionCurveLinear 
       animations:^{ 

        CGPoint newPosition = CGPointMake(aView.center.x + aView.frame.size.width, aView.center.y); 
        aView.center = newPosition; 
       } 
       completion:^(BOOL finished){ 

        [self runView:aView withStartPosition:startPosition]; 

       }]; 
} 

Проект демонстрирует эту функциональность здесь: Github

+0

Удивительный! Проект на GitHub мне очень помог, я понимаю вещи лучше, если я вижу их :) Спасибо! – iDeC

0

С UIView.animateWithDuration иногда неудобно реализовать, я создал способ для выполнения анимации, с последовательностями и группами легче , Вы можете посмотреть здесь: GitHub - UIAnimation . Это версия SKAction от UIKit.

Используя этот UIAnimation способ осуществить то, что вы хотите, будет:

//imgView is your UIImageView 
let positioning = UIAnimation.moveTo(CGPointMake(view.frame.width+imgView.frame.width/2,view.frame.height/2), duration: 0) //put the UIView on the right side of the screen 
let movement = UIAnimation.moveTo(CGPointMake(-imgView.frame.width/2),view.frame.height/2), duration: 5) //moves the UIView to the left side of the screen 
let animation = UIAnimation.sequence([positioning,movement]) //do them sequentially 
let foreverAnimation = UIAnimation.repeatAnimationForever(animation) //repeat the sequence forever 
imgView.runAnimation(foreverAnimation) //start the animation 

Самое интересное здесь то, что вы можете хранить «foreverAnimation» в переменной и использовать его для всех imageViews вы хотите переехать. Вам просто нужно вызвать runAnimation.

Надеюсь, это поможет. Если у вас есть какие-либо проблемы или предложения относительно сценария, свяжитесь со мной пожалуйста. =

+0

Доступен ли он только в Swift? – iDeC

+0

Ой, извините, не понимал, что это был obj-c, мой плохой. Я сделаю obj-c версию –

+0

Тем не менее вы можете импортировать код Swift в объектный-c https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html –

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