[英]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.