我有一个有一些规模转换的观点。当我在它上面应用一些 UIKit 动力学时,它会将它们归零。/:我怎样才能让现有的转换保持在视图上,同时让它跳来跳去?:P
谢谢。:)
我有一个有一些规模转换的观点。当我在它上面应用一些 UIKit 动力学时,它会将它们归零。/:我怎样才能让现有的转换保持在视图上,同时让它跳来跳去?:P
谢谢。:)
看看 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];
这是一个教程,http://www.raywenderlich.com/50197/uikit-dynamics-tutorial。作者说,在动态控制下,我们不能使用变换来缩放你的对象。我希望这篇文章可以帮助你。
我发现解决此问题的最简单方法是将UIKitDynamics
行为应用于容器视图并将缩放/转换应用于该容器内的子视图。
这样,您还可以在应用动态行为的同时为变换设置动画。
受这个答案的启发,我有一个解决方案:更新动画每一帧的变换
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)