現在勉強なども含めてやったことがないことに挑戦しようと課題(こんなアプリを作る)を決めてアプリ制作をしています。(今回は妖精が飛び交うようなアプリにしようと思っています。)

今回アプリの中でタイマーで動かしているアニメーションの座標またはタグを取得してタッチしたものがそうであれば成功のアラート違えば違うアラートを出したいと考えています。

しかし。タッチした時のタッチした場所の座標の取得などはできたり、もともとのviewがタッチしたところからどれだけ離れているかなどはわかるのですが、移動最中のviewのリアルタイムの座標の取得方法が全くわかりません。

現在までにできているのはランダムに移動した後のviewの座標の更新(あくまで設定した座標なので移動中とか全く関係なくなってしまいます。)ぐらいです。

何か、いい方法やヒントなどあればご教授お願いします。

ちなみに、コードはswift3で以下のような形で書いています。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let FairyView:UIImageView = UIImageView()
        FairyView.isUserInteractionEnabled = true
        FairyView.frame.size.height = 130
        FairyView.frame.size.width = 130
        FairyView.backgroundColor = UIColor.blue
        let sampleX = Int(arc4random_uniform(UInt32(self.view.frame.size.width)))
        let sampley = Int(arc4random_uniform(UInt32(self.view.frame.size.height)))
        FairyView.frame.origin.x = CGFloat(sampleX)
        FairyView.frame.origin.y = CGFloat(sampley)
        self.view.addSubview(FairyView)
        FairyView.tag = 1

        _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.createFairy), userInfo: nil, repeats: true)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: UITouch in touches {

        let tag = touch.view!.tag
        if (tag == 1) {

            let alert = UIAlertView()
            alert.title = "成功"
            alert.message = "次"
            alert.addButton(withTitle: "Ok")
            alert.show()


        }else{

            let alert = UIAlertView()
            alert.title = "失敗"
            alert.message = "ゲームオーバー!"
            alert.addButton(withTitle: "Ok")
            alert.show()

        }
    }
}



func createFairy(){

    let sampleXx = Int(arc4random_uniform(UInt32(self.view.frame.size.width)))
    let sampleyy = Int(arc4random_uniform(UInt32(self.view.frame.size.height)))
    let animation = CABasicAnimation(keyPath: "position")
    animation.toValue = [sampleXx, sampleyy]
    animation.duration = 2.0
    animation.repeatCount = MAXFLOAT
    animation.autoreverses = true
    view.viewWithTag(1)?.frame.origin = CGPoint(x:sampleXx , y:sampleyy)
    view.viewWithTag(1)?.layer.add(animation, forKey: nil)
    view.viewWithTag(1)?.setNeedsDisplay()


}


}