2016-01-06 2 views
0

Я хочу добавить некоторые изображения (облака) в фоновом режиме своего приложения и создать с ними эффект бесконечного скроллера. Чтобы они продолжали выскакивать слева и идти вправо.Как создать эффект боковой скроллера с изображениями?

Я пытался осуществить этот путь:

class AnimateClouds: UIImageView { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     animateClouds() 
    } 


    func animateClouds() { 
     UIView.animateWithDuration(0, delay:0, options: [.Repeat], animations: { 
      self.center.x = self.center.x 

      }) { (completed) -> Void in 
       UIView.animateWithDuration(50, delay: 0, options: [.Repeat, .Autoreverse], animations: {() -> Void in 

        // self.center.x = self.center.x - (self.superview?.frame.size.width)!/3 

        self.center.x = self.center.x + (self.superview?.frame.size.width)! //+ (self.frame.size.width) * 2 
        }, completion: { animationFinished in 

         self.removeFromSuperview() 


       }) 
     } 
    } 
} 

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

+0

У вас есть изображения облаков в вашей доске объявлений? Или вы хотите программно добавить изображения облаков? – iamyogish

+0

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

+0

Если у вас слишком много облачных изображений и вы не хотите загромождать раскадровку, лучше добавить ее программно. Итак, что я вижу, вам нужно постоянно перемещать облачные изображения слева направо? – iamyogish

ответ

0

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

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

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

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

func animateCloud(cloud: UIImageView) { 
//Assuming the cloud image will take 60 seconds to travel from 
//left most point to the right most point of view controller's view 
//and determining the speed at cloud travels 
let cloudSpeed = 60.0/view.frame.size.width 

//Since each cloud images are at different position (origin) 
//The distance from each cloud to right end of screen will be different and 
//The time taken (duration) by the each cloud to travel to right end of view will be different 
let duration = (view.frame.size.width - cloud.frame.size.width) * cloudSpeed 

UIView.animateiWithDuration(NSTimeInterval(duration), delay:0.0, options:.CurveLinear, animations: { 
    cloud.frame.origin.x = self.view.frame.width 
}, completion: { 
     cloud.frame.origin.x = -cloud.frame.size.width 
     self.animateCloud(cloud) // For endless animation 
}) 
} 

Это должно сделать трюк. Вы можете добавить столько изображений, сколько хотите, а затем вызвать метод animateCloud() для анимации изображений облаков.

+0

Я получаю сообщение об ошибке: «Невозможно преобразовать значение типа»() ->() »на строке« cloud.frame.origin.x = self.view.frame .... » Другой вопрос: Я реализую это через View Controller и вызываю функцию в viewDidLoad или создаю класс и изменяю пользовательский класс изображений? –

+0

Я могу успешно выполнить описанный выше фрагмент без каких-либо ошибок. Если вы получаете ошибку, замените блок анимации следующим образом: анимации: {() -> Пустота в cloud.frame.origin.x = self.view.frame.width } – iamyogish

+0

Это не решает мою проблему , Мне нужно создать много изображений облаков для создания эффекта. С помощью этого кода я не могу создать эффект бесконечных облаков. Как я могу это сделать без необходимости создавать изображения облаков в моей раскадровке? –

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