2013-12-17 5 views
7

Я знаю, что внешнее изменение на center, bounds и transform будет проигнорировано после UIDynamicItem s init.UIDynamicItem update transform вручную

Но мне нужно вручную изменить transformUIView, что в системе UIDynamicAnimator.

Каждый раз, когда я меняю transform, он будет закрыт сразу.

Значит, любая идея? Благодарю.

ответ

15

Каждый раз, когда вы меняете одно из анимированных свойств, вам нужно позвонить [dynamicAnimator updateItemUsingCurrentState:item], чтобы динамический аниматор знал, что вы его сделали. Он обновит внутреннее представление, чтобы соответствовать текущему состоянию.

EDIT: Из вашего кода ниже видно, что вы пытаетесь изменить масштаб. UIDynamicAnimator поддерживает только поворот и положение, а не масштаб (или любой другой тип аффинного преобразования). К сожалению, он использует transform, чтобы реализовать только поворот. Я считаю это ошибкой в ​​UIDynamicAnimator (но тогда я нахожу большую часть реализации UIKit Dynamics классифицировать как «ошибки»).

Что вы можете сделать, это изменить свои границы (до звонка updateItem...) и перерисовать себя. Если вам нужна производительность аффинного преобразования, у вас есть несколько вариантов:

  • Переместить действительную логику рисования в CALayer или подвид и изменять его масштаб (обновление вашего bounds, чтобы соответствовать, если вам нужно столкновения поведения до сих пор работает).
  • Вместо привязки вашего представления к поведению присоедините прокси-объект (просто введите <UIDyanamicItem> на NSObject), который передает вам изменения. Затем вы можете комбинировать запрошенное преобразование с вашим собственным преобразованием.
+0

Я сделал 'updateItemUsingCurrentState:' сразу после 'myView.transform = CGAffineTransformScale (originTransform, 1.2, 1.2);', а масштаб показывает, то сразу вернитесь. :( – xiaobo

+0

Спасибо, приятель, очень полезно. – xiaobo

10

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

UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:item attachedToAnchor:item.center]; 
attachment.damping = 0.8f; 
attachment.frequency = 0.8f; 
attachment.action = ^{ 
    CGAffineTransform currentTransform = item.transform; 
    item.transform = CGAffineTransformScale(currentTransform, 1.2, 1.2) 
}; 

Вы должны добавить логику в блоке действий, чтобы определить, когда шкала должна быть изменена, и как много, иначе ваш взгляд всегда будет на 120%.

 Смежные вопросы

  • Нет связанных вопросов^_^