Я пытаюсь создать код в XCode для перетаскивания изображения, чтобы я мог перемещать его, а когда я его уронил, это может иметь эффект гравитации. Я создал новый класс для моего изображения под названием DraggedImageView (который наследуется от UIImageView) со следующими изменениями:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
startLocation = touches.first?.location(in: self)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let currentLocation = touches.first?.location(in: self)
let dx = currentLocation!.x - startLocation!.x
let dy = currentLocation!.y - startLocation!.y
self.center = CGPoint(x: self.center.x+dx, y: self.center.y+dy)
}
В моем ViewController у меня есть:
import UIKit
class ViewController: UIViewController {
// Moving background items
@IBOutlet weak var groundView: UIImageView!
@IBOutlet weak var background1View: UIImageView!
@IBOutlet weak var background2View: UIImageView!
@IBOutlet weak var background3View: UIImageView!
@IBOutlet weak var cloud1View: UIImageView!
@IBOutlet weak var cloud2View: UIImageView!
// Main character items
@IBOutlet weak var marioView: DraggedImageView!
// Behavior items
var dynamicAnimator: UIDynamicAnimator!
var collisionBehavior: UICollisionBehavior!
var gravityBehavior: UIGravityBehavior!
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(background1View)
self.view.addSubview(background2View)
self.view.addSubview(background3View)
self.view.addSubview(groundView)
self.view.addSubview(cloud1View)
self.view.addSubview(cloud2View)
self.view.addSubview(marioView)
dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
gravityBehavior = UIGravityBehavior(items: [marioView])
dynamicAnimator.addBehavior(gravityBehavior)
gravityBehavior.magnitude = 0.5
collisionBehavior = UICollisionBehavior(items: [marioView])
collisionBehavior.translatesReferenceBoundsIntoBoundary = true
dynamicAnimator.addBehavior(collisionBehavior)
}
Проблема в том, что главный герой падает только один раз, и когда я пытаюсь снова его перетащить, гравитация не работает. Кроме того, в зависимости от того, на каком симуляторе я выполняю код, границы для столкновений не являются правильными.
Я просто хочу, чтобы у него было правильное поведение, но я пробовал много способов, и я не в состоянии это сделать.