画面の上部から開始し、画面の下部に落ちてそこにとどまるスワイプで正方形を作成したいと思います。私はまた、上に向かって指でそれをドラッグして、画面の下に向かって再び落とすことができるようにしたいと思います。それを行う方法に関するヒント?重力/衝突/弾性を持つSwiftのオブジェクト(UIView)を既に移動しています
すでにスクリーンの下に向かって四角形を作成することができました。私も指でそれを動かすことができました。しかし、問題は、私がそれを動かすたびに、正方形がちょうど同じ場所にとどまることです。私がそれを動かすと、重力/衝突/弾力性は働かないようです。私は正方形から私の指を持ち上げた後にそれが落ちるようにしたい。私のコードの抜粋については以下を参照してください。おそらく、私が見逃してしまう単純なものがあります。任意のヒントをいただければ幸いです。
import UIKit
class ViewController: UIViewController {
var greenSquare: UIView?
var redSquare:UIView?
var animator: UIDynamicAnimator?
override func viewDidLoad() {
super.viewDidLoad()
createFallingObject()
func createFallingObject() {
//remove square from superview
redSquare?.removeFromSuperview()
//create the shape
var dimen = CGRect(x: 130,y: 25,width: 90,height: 90)
redSquare = UIView(frame: dimen)
redSquare?.backgroundColor = UIColor.red
//then add to the screen
self.view.addSubview(redSquare!)
//Initialize the animator
animator = UIDynamicAnimator(referenceView: self.view)
//Add gravity to the squares
let gravity = UIGravityBehavior(items: [redSquare!])
let direction = CGVector(dx: 0.0, dy: 0.05)
gravity.gravityDirection = direction
//Collision
let boundaries = UICollisionBehavior(items: [redSquare!])
boundaries.translatesReferenceBoundsIntoBoundary = true
//Elasticity
let bounce = UIDynamicItemBehavior(items: [redSquare!])
bounce.elasticity = 0.3
// 1. create a gesture recognizer (tap gesture)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
//add pan gesture Regcognizer to the red square
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
redSquare?.addGestureRecognizer(panGestureRecognizer)
animator?.addBehavior(boundaries)
animator?.addBehavior(bounce)
animator?.addBehavior(gravity)
}
//this method handle pan
func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
let translation = gestureRecognizer.translation(in: self.view)
// note: 'view' is optional and need to be unwrapped
gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y + translation.y)
gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
//redSquare?.frame.origin.x = translation.x
//redSquare?.frame.origin.y = translation.y
}
}
// 3. this method is called when a tap is recognized
func handleTap(sender: UITapGestureRecognizer) {
createFallingObject()
}
}