简体   繁体   English

我只想左右移动图像

[英]I want to move the image left and right only

I want to move this boat image with touches. 我想移动此船图像。 It needs to move only left and right but not up and down. 它只需要左右移动,而不必上下移动。 The problem is with this basic code setup, The image is moving all around. 问题在于此基本代码设置,图像四处移动。

I have the following code 我有以下代码

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.
}


}

You need to update only the x coordinate of the image not the y coordinate. 您只需要更新图像的x坐标,而不更新y坐标。

Try this: 尝试这个:

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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM