ios - 如何将 UICollisionBehavior 动画化为 iOS 上移动的 UIView 元素?
问题描述
我正在做一个游戏,你必须用一个可轻弹的球击中一个目标。
- 目标( UIView ) 动画为 CABasicAnimation。
- 球( UIImageView) 被分配了一个动画器,它本身被分配了一个 UICollisionBehavior,包含目标和足球。
所以现在我用球击中了目标,但没有任何反应。但是,如果我击中目标的原点,则会发生碰撞:球从一个看不见的物体反弹回来,屏幕另一侧的目标移动,就像被球击中一样。
所以显然只有目标是动画的,而不是碰撞属性。我怎样才能解决这个问题?
UICollisionBehavior - 代码
self.animator = UIDynamicAnimator(referenceView: football.superview!)
collision = UICollisionBehavior(items: [football,target])
collision.collisionDelegate = self
collision.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collision)
CABasicAnimation - 代码
func coreAnimateGoalRight(){
let animation = CABasicAnimation(keyPath: "position.x")
animation.fromValue = target.center.x
animation.toValue = screenSize.width - target.frame.size.width/2
animation.duration = 5
animation.fillMode = .forwards
animation.autoreverses = true
animation.isRemovedOnCompletion = false
animation.beginTime = CACurrentMediaTime()
target.layer.add(animation, forKey: nil)
}
解决方案
推荐阅读
- oracle-cloud-infrastructure - 使用 python SDK 将文件上传到对象存储
- csv - Pyspark 解释了使用和不使用自定义模式来读取 csv 的差异
- javascript - 中断以角度 9 运行的每个循环
- python - gmail api:从线程获取最新的 2 封电子邮件
- python - 在 python 类中导入另一个类并访问超类属性
- javascript - 想要在鼠标滚轮滚动 Nuxt js 中水平滚动
- batch-file - 设置变量 2 等于变量 1
- python - 如何预处理小于 256 x 256 的 ImageNet 数据?
- qt - QML TableView 和 Headerview 与 QSortFilterProxyModel
- javascript - 仅更新反应中一项的状态