如何在iOS中通过触摸来回移动对象

时间:2016-02-29 04:26:56

标签: ios swift

我需要根据用户的手指来回移动图像。我希望能够触摸屏幕然后图像将移动到我的触摸。图像只能从左到右而不是上下移动,我还想添加图像可以向屏幕一侧移动的距离。

我知道这听起来很多,但我尝试过很多东西都会引起问题。我第一次能够点击并拖动图像,这是好的,但是当我点击其他地方时,图像就会出现在那里,它就不会在那里移动了。

我尝试的第二件事让我拖动图像但是当我点击图像时它根本不会向手指移动。在这一点上,我非常沮丧,并希望得到任何帮助。这是我的代码。

import UIKit

class ViewController: UIViewController {

    @IBOutlet var Person: UIImageView!


    override func viewDidLoad() {
        super.viewDidLoad()

    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in (touches ){
          let location = touch.locationInView(self.view)




            if Person.frame.contains(location){
                Person.center = location
            }
        }
    }


    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in (touches ){
            let location = touch.locationInView(self.view)




            if Person.frame.contains(location){
                Person.center = location
            }
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

1 个答案:

答案 0 :(得分:2)

我假设您正在使用touchesBegan(_:withEvent:)touchesMoved(_:withEvent:)来获取触摸事件。这些方法为您提供UITouch,您可以使用CGPoint将其转换为locationInView(_:)

触摸开始时(即touchesBegan(_:withEvent:)),您应该将自定义视图设置为触摸的CGPoint。 E.g:

UIView.animateWithDuration(0.3, animations: {

    // Only adjust the x, not the y, to restrict movement to along the x-axis.
    // You could also check the x value of point to see if reached some limit.
    self.squareView.frame.origin.x = point.x
})

当触摸移动时(即touchesMoved(_:withEvent:)),您应将自定义视图的位置设置为新触摸的CGPoint。 E.g:

// Only adjust the x, not the y, to restrict movement to along the x-axis.
// You could also check the x value of point to see if reached some limit.
squareView.frame.origin.x = point.x

一些建议

  1. 只使用触摸设置中的第一个UITouch,这样就可以摆脱你的for循环。
  2. if Person.frame.contains(location){行是错误的,因为如果触摸位于Person的框架内,它只会移动Person,请将其删除并设置框架&#39}。来自UITouch点的原点(或使用上面的代码为其制作动画)。