Каждый раз, когда вы меняете одно из анимированных свойств, вам нужно позвонить [dynamicAnimator updateItemUsingCurrentState:item]
, чтобы динамический аниматор знал, что вы его сделали. Он обновит внутреннее представление, чтобы соответствовать текущему состоянию.
EDIT: Из вашего кода ниже видно, что вы пытаетесь изменить масштаб. UIDynamicAnimator
поддерживает только поворот и положение, а не масштаб (или любой другой тип аффинного преобразования). К сожалению, он использует transform
, чтобы реализовать только поворот. Я считаю это ошибкой в UIDynamicAnimator
(но тогда я нахожу большую часть реализации UIKit Dynamics классифицировать как «ошибки»).
Что вы можете сделать, это изменить свои границы (до звонка updateItem...
) и перерисовать себя. Если вам нужна производительность аффинного преобразования, у вас есть несколько вариантов:
- Переместить действительную логику рисования в
CALayer
или подвид и изменять его масштаб (обновление вашего bounds
, чтобы соответствовать, если вам нужно столкновения поведения до сих пор работает).
- Вместо привязки вашего представления к поведению присоедините прокси-объект (просто введите
<UIDyanamicItem>
на NSObject
), который передает вам изменения. Затем вы можете комбинировать запрошенное преобразование с вашим собственным преобразованием.
Я сделал 'updateItemUsingCurrentState:' сразу после 'myView.transform = CGAffineTransformScale (originTransform, 1.2, 1.2);', а масштаб показывает, то сразу вернитесь. :( – xiaobo
Спасибо, приятель, очень полезно. – xiaobo