9

我有一个有一些规模转换的观点。当我在它上面应用一些 UIKit 动力学时,它会将它们归零。/:我怎样才能让现有的转换保持在视图上,同时让它跳来跳去?:P

谢谢。:)

4

4 回答 4

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];
于 2013-11-14T20:46:02.203 回答
3

这是一个教程,http://www.raywenderlich.com/50197/uikit-dynamics-tutorial。作者说,在动态控制下,我们不能使用变换来缩放你的对象。我希望这篇文章可以帮助你。

于 2013-11-15T06:11:25.230 回答
2

我发现解决此问题的最简单方法是将UIKitDynamics行为应用于容器视图并将缩放/转换应用于该容器内的子视图。

这样,您还可以在应用动态行为的同时为变换设置动画。

于 2019-01-08T10:07:39.267 回答
0

这个答案的启发,我有一个解决方案:更新动画每一帧的变换

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)
于 2018-01-03T23:02:28.023 回答