2017-05-03 8 views
0

正解を得るには多すぎる方程式を試しました。しかし、ここに私のコードは次のとおりです。UIImageView(矢印の画像)を画面上のどこをタッチするかを指定する

let Ypos = (self.view.center.y/2.5); 
self.linegu.center = self.view.center 
self.linegu.center.y = (self.view.center.y + Ypos) 

wherever I touch the screen, the arrow points toward a different point =(

+0

は表示されませんが、私はあなたが90度で間違っていると思います。結果から90度を加算または減算してみてください。あなたが写真をタップしたポイントを提示してください。 – Sergey

+0

おそらく、あなたはプロジェクトを提供する必要があります。 コードでデモプロジェクトを作成します。 それは働いています。 https://github.com/sunbohong/Demo-Collection/commit/3ed6f593a1fa3dde5e489165821033ed6e02631f#diff-86182cc774e7f14dc3e6cf106edaa8f1 –

+0

私は多分、私はそれが権利を取得することができ引くしようとします。 –

答えて

1

画像ビューが置かれている場所それは問題ではありません。そしてあなたはあなたの "魔法の数"を投げ捨てるべきです2.5。あなたはこれを考えすぎている。

arrowは画像ビューであり、右向きの矢印で水平のライフを開始すると仮定します。また、バックグラウンドビューにタップジェスチャ認識機能があるとします。 (簡単にするために、タップジェスチャ認識機能を使用していますが、最終的にはパンジェスチャ認識機能を使用するように思われます)。

次に、タップジェスチャのアクションハンドラが見てください:

let c = self.arrow.center 
    let p = t.location(in: self.arrow.superview) 
    let angle = atan2(p.y - c.y, p.x - c.x) 
    self.arrow.transform = CGAffineTransform(rotationAngle:angle) 

それはそれと同じくらい簡単です。絵で

enter image description here

+0

お返事ありがとうございます。 –

+0

しかし、角度は十分ではありません.(このリンクをご覧くださいhttp:// gph。/ 2qz4dgI –

+0

あなたはそれが何を意味するのか分かりません。 _Touches_はあまり正確ではありませんが(あなたの指は太っています)、数学は正確です。私のスクリーンキャストのラインは、クリックした場所を指しています。 – matt

0

理由:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first { 
     let coord = touch.location(in:view) 
     self.linegu.transform = CGAffineTransform.init(rotationAngle: atan((coord.y - (self.view.center.y + (self.view.center.y)/2.5))/(coord.x - self.view.center.x))) 
    } 
} 

lineguは、私が使用していると私はこのコードを使用してビューの途中でそれを配置UIImageViewですあなたはこの奇妙な式を使用しますか?

CGAffineTransform.init(rotationAngle: atan((coord.y - (self.view.center.y + (self.view.center.y)/2.5))/(coord.x - self.view.center.x))) 

これはどこですか?2.5仕切りはどこから来ましたか?


何ちょうどUIImageViewを配置する.center.frameを使用してはどうですか?

同様:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first { 
     let location = touch.location(in: view) 
     imageView.center = location // may need to apply some offset here, depending on where exactly the arrow points in the arrow image 
    } 
} 
+0

数式は基本的に2点間の角度です。 y1とx1は、コード内にこれらの固定小数点を既に割り当てている固定小数点を表します。 –

+0

は、y軸の矢印を下げることになります。 –

+0

私は私が触れたところを指すために矢印が必要です。固定点から私が触れる点までの角度を得るために式tan-1 [(y2-y1)/(x2-x1)]を使いました。 "CGAffineTransform"矢印を回転させるにはinit(rotationAngle:angle)を押してください。しかし失敗しました=( –

関連する問題