繁体   English   中英

具有现有仿射变换的UIKit Dynamics

[英]UIKit Dynamics with existing affine transform

我的观点有一些规模转换。 当我在上面应用一些UIKit Dynamics时,会将它们归零。 /:如何在跳动的同时将现有的变换保留在视图上? :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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM