У меня есть UIImageView
, что, когда пользователь нажимает на нее, нажимает и выключает границу в 4 пункта. Я пытаюсь оживить границу и следующим образом:Как правильно установить модель при выполнении CABeginAnimation
CABasicAnimation *widthAnimation = [CABasicAnimation animationWithKeyPath:@"borderWidth"];
widthAnimation.toValue = self.isSelected ? @4.0 : @0.0;
widthAnimation.duration = 0.1;
[self.imageView.layer addAnimation:widthAnimation forKey:@"borderWidth"];
Теперь, как я узнал от исследований и чистящими SO, CABasicAnimation
только изменяет уровень представления, но не конкретной модели. Я также читал, что использование fillMode
и removedOnCompletion
- это плохая практика, поскольку это приводит к несоответствиям между моделью и тем, что видит пользователь. Итак, я попытался изменить модель с помощью следующей строки:
self.imageView.layer.borderWidth = self.isSelected ? 4.0 : 0.0;
Проблема заключается в том, эта линия, кажется, установить свойство сразу, так что к тому времени, когда анимация бьёт, ширина границы уже в это желаемое значение. Я пробовал придерживаться этой строки в начале кода, конца и везде между ними, но без успеха. Мне удалось найти хакерское решение: вместо установки свойства я передал свойство setter в performSelector: withObject: afterDelay:
, причем время задержки - это продолжительность анимации. Это работает большую часть времени, но иногда циклы не совсем совпадают, и анимация запускается сначала, затем она возвращается к исходному состоянию, затем она привязывается к новому состоянию, предположительно в результате performSelector
Итак, есть ли способ плавно анимировать границу без performSelector
?
Любая помощь очень ценится.