teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加で修正点を足しました。

2018/05/29 21:07

投稿

hameji
hameji

スコア1380

answer CHANGED
@@ -5,18 +5,33 @@
5
5
  override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
6
6
  を下記のもの
7
7
  override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
8
- に書きかえれば、理想としている状態になるのではないでしょうか?
8
+ に書きかえれば、ほぼ理想としている状態になるのではないでしょうか?
9
9
 
10
10
  なお、落下中に画面を押すと、一瞬だけ押した地点に現れて、
11
11
  再び落下していたとこに戻るのは、touchesBeganなので、
12
- 押した瞬間だけコードが走るためです。
12
+ 押した瞬間だけ位置変更されるためです。
13
13
  そこを修正したいなら、touchesBeganの最初に
14
14
  animator?.removeAllBehaviors()
15
- を追加すると、落下中に押しても、位置変更できるようになります。
15
+ を追加すると、落下中に押した時落下はなくなり、位置変更できるようになります。
16
16
 
17
+ これはJoseさんの理想かわかりませんが、最初の部分を下記のように修正した方が
18
+ 触って動かせている感が出ると思います。touchesEndedには位置変更コードはいりません。
17
19
 
18
- なお、
20
+ ```Swift
21
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
22
+ animator?.removeAllBehaviors()
23
+ }
19
24
 
25
+ override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
26
+ let touch: UITouch! = touches.first
27
+ location = touch.location(in: self.view)
28
+ print(location)
29
+ person.center = location
30
+ }
31
+ ```
32
+
33
+ さらにお節介かもしれませんが、
34
+
20
35
  ```Swift
21
36
  //add gravity
22
37
  let gravity = UIGravityBehavior(items: [person])