У меня есть иерархия пользовательских UIView
объектов. Вид листа можно выбрать. У них есть собственность isSelected
. Если для этого параметра установлено значение YES
, эффект, который я хочу, - это изменить вид на мой «выбранный» цвет сразу, а затем временно набухать в размере, а затем вернуться к его первоначальному размеру. Я думал следующий код будет делать трюк:Как оживить изменение цвета и цвета для пользовательского выбора?
self.backgroundColor = [UIColor colorWithRed: 0 green: 0.5 blue: 1 alpha: 1];
CGRect currentFrame = self.frame;
CGRect bigFrame = CGRectInset(currentFrame, -50, -50);
[UIView animateWithDuration: 0.4 animations:^{
self.frame = bigFrame;
} completion:^(BOOL finished) {
if (finished) {
[UIView animateWithDuration: 0.4 animations:^{
self.frame = currentFrame;
}];
}
}];
я преувеличил время и смещение здесь, потому что я пытался увидеть, что на самом деле происходит. Что происходит, так это то, что изменения цвета кажутся анимированными, поэтому он медленно изменяется от белизны по умолчанию от 0,93 до моего синего. Кроме того, он не растет в размерах. Похоже, что он переводится вниз и направо по вставке, а затем возвращается в нормальное место (а не растет во всех направлениях).
Что мне не хватает?
Я никогда раньше не использовал их вариант ключевого кадра. Благодаря! Это в основном работало. По крайней мере, он не вел себя неожиданно. Теперь у меня есть два вопроса. 1) Использование преобразования делает временное увеличение размера относительно исходного размера. Это заставляет маленьких парней просто поп-музыки, а большие парни действительно большие. Я предпочел бы иметь однородный пиксель «начало» кадра. Есть ли альтернативный способ? Я мог бы перевести вычисления весов для достижения желаемого смещения пикселей, я думаю. 2) Я не могу найти документы для 'CATransform3D'. Я нашел функции для их изменения. Но не знаю, куда пойти, чтобы найти .scale –
Чтобы сделать кадры, я переключился на 'bounds' keyPath (видимо, вы не должны анимации кадров слоев, а скорее границ и положения и т. Д.). А затем построил массив 'NSValue' вокруг' CGRect'. –
Вы можете легко достичь этого путем вычисления значений отказов в соответствии с вашим кадром, посмотрите на ответ об обновлениях –