【Swift】タップした時に追従してくるViewを作成する
はじめに
このような感じで、タップした位置に追従してくるようなViewを作成したいと思います。
実装
コピペで作成できます。
final class ViewController: UIViewController {
private var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
myView = UIView()
myView.frame.size = CGSize(width: 100, height: 100)
myView.center = self.view.center
myView.backgroundColor = .red
myView.isUserInteractionEnabled = true
self.view.addSubview(myView)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first!.view == self.view {
let after = touches.first!.location(in: self.view)
let before = myView.center
let deltaX = after.x - before.x
let deltaY = after.y - before.y
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
}
}
}
解説
touchesBegan
はタップした時に呼ばれるメソッドです。(touchesBegan)
一番はじめにタップした箇所の座標を取得します。これがViewの目的地の座標というわけです。
let after = touches.first!.location(in: self.view)
移動前のViewの座標も取得する必要があります。
let before = myView.center
xとyの変化量をそれぞれ求めます。(変化量というのは、どれぐらい値が増減したかを表すものです)
例えば、移動前の座標(10, 300)から移動後の座標(30, 200)に移動した場合のxとyの変化量Δx, Δyは
Δx = 30 - 10 = 20
Δy = 200 - 300 = -100
よって、変化量は(20, -100)となるわけです。
let deltaX = after.x - before.x
let deltaY = after.y - before.y
そして、求めた変化量がViewが移動するべき移動量になるので、CGAffineTransformでアニメーション付きで移動させてあげます。(CGAffineTransform)
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
おわりに
おわりです。
Author And Source
この問題について(【Swift】タップした時に追従してくるViewを作成する), 我々は、より多くの情報をここで見つけました https://qiita.com/REON/items/833ef4e36edc7f2cb4d1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .