更新UIImageView Swift的位置

Nic*_*los 10 frame uiview uiimageview swift

当我按下按钮时,我正试图制作一个可拖动的图像(猴子)代替另一个可拖动的图像(香蕉).

到目前为止,我已经能够获得香蕉的坐标,并将它们存储为猴子的新x,y坐标.但是,视图没有更新,猴子也没有移动到它的新位置.

我确定我需要更新视图,但无法弄清楚.我试图添加一个新的子视图(self.view.addSubview(monkey))但是当我这样做时,它是重置的整个视图,猴子和香蕉都回到原来的坐标.

这是动作按钮的代码:

@IBAction func getCoordinates (sender : AnyObject) {
    var bananax = banana.frame.origin.x
    var bananay = banana.frame.origin.y

    var monkeyx = monkey.frame.origin.x
    var monkeyy = monkey.frame.origin.y
    println("Banana : \(bananax) et \(bananay)")
    println("Monkey's default coordinates : \(monkeyx) et \(monkeyy)")


    monkeyx = bananax
    monkeyy = bananay
    println("Monkey's new coordinates : \(monkeyx) et \(monkeyy)")
}
Run Code Online (Sandbox Code Playgroud)

关于如何仅更新猴子而不重置整个视图的任何想法?

谢谢 :)

Ber*_*ter 21

设置monkeyxmonkeyy低于此值时,这些值就会被丢弃.

var monkeyx = monkey.frame.origin.x
var monkeyy = monkey.frame.origin.y
Run Code Online (Sandbox Code Playgroud)

分配以下值只会将一个局部变量的值分配给另一个局部变量.它实际上并没有改变坐标monkey.

monkeyx = bananax
monkeyy = bananay
Run Code Online (Sandbox Code Playgroud)

你必须通过构造一个新的CGRect和分配monkey的来设置猴子的新坐标frame:

monkey.frame = CGRect(x: bananax, y: bananay, width: monkey.frame.size.width, height: monkey.frame.size.height)
Run Code Online (Sandbox Code Playgroud)

由于您只是将monkey原点设置为banana原点,因此可以删除所有var声明,并通过构造monkey具有monkey's size和banana'原点的新帧来将其减少为一行:

monkey.frame = CGRect(origin: banana.frame.origin, size: monkey.frame.size)
Run Code Online (Sandbox Code Playgroud)


Yan*_*eph 5

嗨创建这个扩展,如果你想.对于斯威夫特

创建文件Extends.Swift添加此代码

/**
    Extension UIView
    by DaRk-_-D0G
*/
extension UIView {
    /**
    Set x Position

    :param: x CGFloat
    by DaRk-_-D0G
    */
    func setX(#x:CGFloat) {
        var frame:CGRect = self.frame
        frame.origin.x = x
        self.frame = frame
    }
    /**
    Set y Position

    :param: y CGFloat
    by DaRk-_-D0G
    */
    func setY(#y:CGFloat) {
        var frame:CGRect = self.frame
        frame.origin.y = y
        self.frame = frame
    }
    /**
    Set Width

    :param: width CGFloat
    by DaRk-_-D0G
    */
    func setWidth(#width:CGFloat) {
        var frame:CGRect = self.frame
        frame.size.width = width
        self.frame = frame
    }
    /**
    Set Height

    :param: height CGFloat
    by DaRk-_-D0G
    */
    func setHeight(#height:CGFloat) {
        var frame:CGRect = self.frame
        frame.size.height = height
        self.frame = frame
    }
}
Run Code Online (Sandbox Code Playgroud)

For Use(继承UIView)

inheritsOfUIView.setX(x: 100)
button.setX(x: 100)
view.setY(y: 100)
Run Code Online (Sandbox Code Playgroud)