Могу ли я остановить анимацию UIImageView на последнем кадре?
У меня есть анимация с использованием UIImageView
myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 1;
myAnimatedView.animationRepeatCount = 1;
[myAnimatedView startAnimating];
Как я могу сказать анимации остановиться на последнем кадре или быть видимым последним кадром серии изображений?
Заранее благодарю
Ответы
Ответ 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