我的视图有一些比例变换。当我在它上面应用一些UIKit Dynamics时,它会将它们归零。 /: 如何让它在跳转时保持视图上的现有转换? :P
感谢。 :)
答案 0 :(得分:15)
看看UIDynamicAnimator的updateItemUsingCurrentState
。
动态动画师会自动读取您添加到其中的每个动态项目的初始状态(位置和旋转),然后负责更新项目的状态。如果在将动态项目添加到动态动画师后主动更改动态项目的状态,请调用此方法以请求动画师阅读并合并新状态。
因此,只要您将正在转换的项目添加到动画制作工具后更改转换,就可以立即调用updateItemUsingCurrentState
。
id <UIDynamicItem> dynamicItem; // whatever your item is, probably a UIView
UIGravityBehavior *behavior = [[UIGravityBehavior alloc] initWithItems:@[dynamicItem]];
UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; // or however you're getting your animator
[animator addBehavior:behavior];
view.transform = CGAffineTransformMakeScale(1.5, 1.5);
[animator updateItemUsingCurrentState:view];
答案 1 :(得分:3)
这是一个教程http://www.raywenderlich.com/50197/uikit-dynamics-tutorial。 作者说,在动态控制下,我们不能使用变换来缩放对象。 我希望这篇文章可以帮助你。
答案 2 :(得分:0)
受到https://www.toadworld.com/platforms/oracle/w/wiki/11698.apex-5-1-interactive-grid-compared答案的启发,我有一个解决方案:更新动画每一帧的变换
let attachment = UIAttachmentBehavior(item: item, attachedTo: item) // Workaround - attach the item to itself
attachment?.action = { () in
item.transform = item.transform.scaledBy(x: 1.5, y: 1.5)
}
animator.addBehavior(attachment)
答案 3 :(得分:0)
我发现解决此问题的最简单方法是将UIKitDynamics
行为应用于容器视图,并将缩放/变换应用于该容器内的子视图。
这样,您还可以在保持动态行为的同时为转换设置动画。