Подтвердить что ты не робот

Могу ли я остановить анимацию UIImageView на последнем кадре?

У меня есть анимация с использованием UIImageView

myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 1;
myAnimatedView.animationRepeatCount = 1;
[myAnimatedView startAnimating];

Как я могу сказать анимации остановиться на последнем кадре или быть видимым последним кадром серии изображений?

Заранее благодарю

4b9b3361

Ответ 1

свойство изображения в классе UIImageView имеет следующие документы: "Если свойство animationImages содержит значение, отличное от nil, содержимое этого свойства не используется."

Таким образом, трюк, чтобы удерживать последний кадр анимации в iOS4, заключается в том, чтобы сначала установить свойство изображения на этот последний кадр (в то время как анимация по-прежнему равна нулю), а затем установить свойство animationImages и вызвать startAnimating. Когда анимация завершается, отображается свойство изображения. Не требуется обратный вызов/делегат.

Ответ 2

Вы можете установить образ последнего кадра в свой экземпляр UIImageView, а затем, когда анимация завершится, изображение последнего кадра останется видимым. Вот код:

// create your array of images
NSArray *images = @[[UIImage imageNamed:@"video1.png"], [UIImage imageNamed:@"video2.png"]];
UIImageView *imageView = [UIImageView new];
imageView.image = images.lastObject;
imageView.animationImages = images;
imageView.animationDuration = 1.0; // seconds
imageView.animationRepeatCount = 1;
[imageView startAnimating];

Ответ 3

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

myAnimatedView.image = [myAnimatedImages objectAtIndex:myAnimatedImages.count - 1]

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

Документация UIImageViewAnimation

Ответ 4

Я просто бросаю UIView, удерживая первый кадр поверх анимации UIView... сделать вид анимации скрытым и установить его как последний кадр... а затем переключить скрытые свойства во время процесса.

so... just before your last line...
// quickly hide the view that only holds the first frame
myOtherView.hidden = YES;
// start the animation
[myAnimatedView startAnimating];
// show the animation view
myAnimatedView.hidden = NO;
// BAM, done. It will use the last image when it ends.

Меньше кода, больше IB, когда это возможно.

Ответ 5

Я достиг этого, создав подкласс UIImageView, переопределив startAnimating() и установив свойство изображения как последнее изображение в вашем массиве изображений, прежде чем вы вызовете super.startAnimating(). Это в дополнение к настройке animationRepeatCount на 1 достигает желаемого эффекта.

Вот мой класс Swift:

class SuccessAnimationImageView: UIImageView {

var duration: NSTimeInterval = 2

override func didMoveToSuperview() {
    super.didMoveToSuperview()
    setupImages()
}

override func startAnimating() {
    setLastFrame()
    super.startAnimating()
}

func setupImages() {
    animationImages = ImageHelper.successAnimationImages
    image = animationImages?.first
    animationRepeatCount = 1
}

func setLastFrame() {
    image = animationImages?.last
}
}

Ответ 6

Версия Swift будет такой, как указано ниже, но в логике target-c она будет такой же
Вы можете взломать его, просто установив image UIImageView на последнее изображение массива изображений. непосредственно перед кодом анимации, например imageView.image = arrayOfImage.last
вся логика дана ниже

        imageView.image = arrayOfImage.last //(this line create magic)
        imageView.animationImages = arrayOfImage
        imageView.animationDuration = 1.0
        imageView.animationRepeatCount = 1
        imageView.startAnimating()

Ответ 7

Вы установили для свойства removedOnCompletion анимации вращения значение НЕТ, например., rota.removedOnCompletion = NO;

Это должно оставить слой презентации, где он был, когда анимация закончилась. По умолчанию используется значение YES, которое будет привязываться к значению модели, то есть описываемого вами поведения. Также необходимо установить fillMode,

то есть., rota.fillMode = kCAFillModeForwards;

Ответ 8

Вы можете остановить анимацию, установив свойство UIImageView animateImg.animationDuration = 1