Анимация ImageView, перебор изображений

Итак, я хочу анимировать UIImageView на экране загрузки, и мне сказали, что встроенный метод «animationImages» занимает много памяти и является плохим программированием, поэтому я не буду его использовать, у меня также были проблемы с ним, но это не главное.

Код ниже почти работает, но он слишком быстро анимируется, хотя я поставил 3 секунды.

func animate() {

    UIView.animateWithDuration(3, animations: { () -> Void in

        self.logoImageView.image = UIImage(named: "00")
        self.logoImageView.image = UIImage(named: "02")
        self.logoImageView.image = UIImage(named: "03")
        self.logoImageView.image = UIImage(named: "04")
        self.logoImageView.image = UIImage(named: "05")
        self.logoImageView.image = UIImage(named: "06")
        self.logoImageView.image = UIImage(named: "07")
        self.logoImageView.image = UIImage(named: "08")
        self.logoImageView.image = UIImage(named: "09")
        self.logoImageView.image = UIImage(named: "10")
        self.logoImageView.image = UIImage(named: "11")
        self.logoImageView.image = UIImage(named: "12")
        self.logoImageView.image = UIImage(named: "13")
        self.logoImageView.image = UIImage(named: "14")
        self.logoImageView.image = UIImage(named: "15")
        self.logoImageView.image = UIImage(named: "16")
        self.logoImageView.image = UIImage(named: "17")
        self.logoImageView.image = UIImage(named: "18")
        self.logoImageView.image = UIImage(named: "19")
        self.logoImageView.image = UIImage(named: "20")
        self.logoImageView.image = UIImage(named: "21")
        self.logoImageView.image = UIImage(named: "22")
        self.logoImageView.image = UIImage(named: "23")
        self.logoImageView.image = UIImage(named: "24")
        self.logoImageView.image = UIImage(named: "25")
        self.logoImageView.image = UIImage(named: "26")

        }) { (success) -> Void in

            self.fadeInLabel()
    }

Тем не менее, приведенный ниже код исчезает в приветственной метке и отлично работает, поэтому мне интересно, в чем проблема с приведенным выше. Спасибо за помощь!

func fadeInLabel() {

    UIView.animateWithDuration(2, animations: { () -> Void in

        self.labelImageView.alpha = 1

        }) { (success) -> Void in

          self.performSelector("pushToCreateVC", withObject: self, afterDelay: 1)
    }

}

person Echizzle    schedule 16.11.2015    source источник
comment
Упомянутый выше метод таймера лучше, но это еще не все: stackoverflow.com/a/34232973/763355   -  person MoDJ    schedule 12.12.2015


Ответы (2)


Если вы хотите анимировать изображения, вы можете использовать свойство animationImages для UIImageView.

self.logoImageView.animationImages = imagesListArray;
self.logoImageView.animationDuration = 3.0
self.logoImageView.startAnimating()

где imagesListArray — массив изображений, которые вы хотите анимировать

ИЛИ

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

// in view Load
 _slide = 0
 [self changeSlide];

// Loop gallery 
NSTimer *timer = [NSTimer timerWithTimeInterval:5.0f target:self selector:@selector(changeSlide) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];


- (void)changeSlide
{

if(_slide > _galleryImages.count-1) _slide = 0;

UIImage *toImage = [UIImage imageNamed:_galleryImages[_slide]];
[UIView transitionWithView:_yourimageView
              duration:0.6f
               options:UIViewAnimationOptionTransitionFlipFromLeft
            animations:^{
                _yourimageView.image = toImage;

            } completion:nil];
_slide++;

}
person Mukesh    schedule 16.11.2015

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

var counter = 0
var timer = NSTimer()
@IBAction func countButton(sender: UIButton) {

    timer.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction", userInfo: nil, repeats: true)

}

func timerAction() {
    ++counter
    switch counter{
    case 1 :
        image1.image = UIImage(named:"Bird-1.gif")
    case 2 :
        image1.image = UIImage(named:"Bird-2.gif")
    case 3 :
        image1.image = UIImage(named:"Bird-3.gif")
    case 4 :
        image1.image = UIImage(named:"Bird-4.gif")
    case 5 :
        image1.image = UIImage(named:"Bird-5.gif")
    case 6 :
        counter = 0
        timer.invalidate()
    default :
        print("Error")
    }
}
person user4812000    schedule 16.02.2016