如何解决UICollisionBehavior 忽略屏幕边缘
我有几个 UIView 在屏幕上不断移动。使用 uicollisionbehavior
我可以防止视图相互碰撞,但我需要它们穿过屏幕的边缘(顶部、左侧、右侧、底部)。在下面的这个例子中,一旦它们碰到屏幕的底部边缘,它们就会相互弹开,然后最终就坐在那里。我尝试对 UIViews 进行子类化,看看碰撞是否只适用于子类类型,但这不起作用。
如何防止 UIViews 相互碰撞,但仍然让它们穿过屏幕边缘?
子类:
class CollisionView: UIView { // nothing special happens here except it's a subclass
}
代码:
lazy var redView: CollisionView = {
let view = CollisionView()
view.backgroundColor = .red
return view
}()
lazy var blueView: CollisionView = {
let view = CollisionView()
view.backgroundColor = .blue
return view
}()
lazy var yellowView: CollisionView = {
let view = CollisionView()
view.backgroundColor = .yellow
return view
}()
lazy var purpleView: CollisionView = {
let view = CollisionView()
view.backgroundColor = .purple
return view
}()
lazy var greenView: CollisionView = {
let view = CollisionView()
view.backgroundColor = .green
return view
}()
var arr = [CollisionView]()
var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
var collider: uicollisionbehavior!
var bouncingBehavior : UIDynamicItemBehavior!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
addSubViews()
addAnimatorAndBehaviors()
}
func addAnimatorAndBehaviors() {
animator = UIDynamicAnimator(referenceView: self.view)
gravity = UIGravityBehavior(items: arr)
animator.addBehavior(gravity)
collider = uicollisionbehavior(items: arr)
collider.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collider)
bouncingBehavior = UIDynamicItemBehavior(items: arr)
bouncingBehavior.elasticity = 0.75
animator.addBehavior(bouncingBehavior)
}
func addSubViews() {
let size = CGSize(width: 50,height: 50)
redView.frame = CGRect(origin: view.center,size: size)
blueView.frame = CGRect(origin: view.center,size: size)
yellowView.frame = CGRect(origin: view.center,size: size)
purpleView.frame = CGRect(origin: view.center,size: size)
greenView.frame = CGRect(origin: view.center,size: size)
view.addSubview(redView)
view.addSubview(blueView)
view.addSubview(yellowView)
view.addSubview(purpleView)
view.addSubview(greenView)
arr = [redView,blueView,yellowView,purpleView,greenView]
}
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。