我想只左右移动图像

时间:2017-04-19 11:19:16

标签: ios swift touchesbegan

我想用触摸移动这个船形象。它只需要左右移动,但不能上下移动。问题在于这个基本的代码设置,图像四处移动。

我有以下代码

import UIKit

class ViewController: UIViewController {

var boat:UIImageView!
var stone:UIImageView!

@IBOutlet weak var myView: UIView!
var location = CGPoint(x: 0, y: 0)

func start() {

boat = UIImageView(image: UIImage(named: "boat"))
boat.frame = CGRect(x: 0, y: 0, width: 60, height: 90)
boat.frame.origin.y = self.view.bounds.height - boat.frame.size.height - 10
boat.center.x = self.view.bounds.midX

self.view.addSubview(boat)
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    start()
    movingStone()
    intersectsAt()



}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch : UITouch = touches.first as UITouch!

    location = touch.location(in: self.view)
    boat.center = location


}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch : UITouch = touches.first as UITouch!
       location = touch.location(in: self.view)

    boat.center = location
}

func movingStone() {


    stone = UIImageView(image: UIImage(named: "stones.png"))
    stone.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
    var stone2 = 10 + arc4random() % 20

    stone.bounds = CGRect(x:10, y:10, width:40.0, height:40.0)
    stone.contentMode = .center;
    stone.layer.position = CGPoint(x: Int(stone2), y: 10)
    stone.transform = CGAffineTransform(rotationAngle: 3.142)


    self.view.insertSubview(stone, aboveSubview: myView)



    UIView.animate(withDuration: 5, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: { () -> Void in
        self.stone.frame.origin.y = self.view.bounds.height + self.stone.frame.height + 10
    }) { (success:Bool) -> Void in

        self.stone.removeFromSuperview()
        self.movingStone()

    }



}
func intersectsAt() {


  if(boat.layer.presentation()?.frame.intersects
((stone.layer.presentation()?.frame)!))! {
            boat.image = UIImage(named: "wreckboat.png")

        }

    }

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


}

1 个答案:

答案 0 :(得分:2)

您只需要更新图像的x坐标而不是y坐标。

试试这个:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch : UITouch = touches.first as UITouch!
    let loc_tmp = touch.location(in: self.view)

    // only use the x coordinate of the touch location
    location = CGPoint(x: loc_tmp.x, y: boat.center.y)
    boat.center = location


}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch : UITouch = touches.first as UITouch!
    let loc_tmp = touch.location(in: self.view)

    // only use the x coordinate of the touch location
    location = CGPoint(x: loc_tmp.x, y: boat.center.y)
    boat.center = location
}