“启动”并放下一个 UIView

Posted

技术标签:

【中文标题】“启动”并放下一个 UIView【英文标题】:"Launch" and drop a UIView 【发布时间】:2017-08-28 14:40:15 【问题描述】:

上图说明了我想要的:

红色圆圈是 UIView 的起点 我想通过改变 X 位置向上(Y 位置)启动它 我想让它落在边界内。

我尝试了什么:

对于启动,我可以使用 UIView.animate 函数。对于 drop,我可以使用 UIDynamicAnimator。但是也有一些问题:

-在 UIView.animate 中我不能“弯曲”动画,只能是一条直线。我可以在这里用这个答案画一条曲线:https://***.com/a/43813458/7715250

- 结合这两个功能不起作用。 UIView.animate 完成后,UIView 就直接往下掉了。

UIDynamicAnimator 的代码:

var animator: UIDynamicAnimator!

    //view did appear
    let view2 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    view2.center = self.view.center
    view2.backgroundColor = .blue
    self.view.addSubview(view2)
    animator = UIDynamicAnimator(referenceView: self.view)
    let gravity = UIGravityBehavior(items: [view2])
    animator.addBehavior(gravity)
    let collosion = UICollisionBehavior(items: [view2])
    collosion.translatesReferenceBoundsIntoBoundary = true
    let dynamic = UIDynamicItemBehavior(items: [view2])
    dynamic.elasticity = 0.7
    animator.addBehavior(collosion)
    animator.addBehavior(dynamic)

这将使 UIView 具有很好的反弹效果。但是如何启动 UIView?如何更改 X 和 Y 位置并保持添加的行为?

【问题讨论】:

【参考方案1】:

我认为你需要的是 UIPushBehavior。添加这个额外的行为。

let push = UIPushBehavior(items: [view2], mode: UIPushBehaviorMode.instantaneous)
push.setAngle(CGFloat(-M_PI/2 - 0.1), magnitude: 8.0) // Adjust angle and magnitude
animator.addBehavior(push)

【讨论】:

是的,我认为这是一个不错的方法。我可以在 22 小时内接受它

以上是关于“启动”并放下一个 UIView的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo Admin 发布 v0.1;VMware 或与微软放下恩怨展开合作

onclick时如何放下可拖动的div?

让孩子放下iPad放下手机的秘密武器!| 象妈分享会

学会放下,你就赢了(深度好文)

一次放下一个标记

求不得,放下,求得,也须放下