更新UIImageView Swift的位置

时间:2014-08-17 16:49:41

标签: uiview uiimageview swift frame

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

到目前为止,我已经能够获得香蕉的坐标,并将它们存储为猴子的新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)")
}

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

谢谢:)

4 个答案:

答案 0 :(得分:20)

当您在下面设置monkeyxmonkeyy时,这些值就会被丢弃。

var monkeyx = monkey.frame.origin.x
var monkeyy = monkey.frame.origin.y

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

monkeyx = bananax
monkeyy = bananay

您必须通过构建新的CGRect并分配monkey' s frame来设置猴子的新坐标:

monkey.frame = CGRect(x: bananax, y: bananay, width: monkey.frame.size.width, height: monkey.frame.size.height)

由于您只是将monkey的原点设置为banana的原点,因此您可以删除所有var声明并通过构造{{1}将其减少为一行monkey的大小和monkey来源的新框架:

banana

答案 1 :(得分:5)

如果你愿意,你可以创建这个扩展。 适用于Swift

创建文件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
    }
}

使用(继承UIView)

inheritsOfUIView.setX(x: 100)
button.setX(x: 100)
view.setY(y: 100)

答案 2 :(得分:1)

现在你可以做到

monkey.frame.origin = banana.frame.origin

答案 3 :(得分:0)

如果您正在使用针对猴子和香蕉的UIImageView,您可以通过执行以下操作来简化此操作

monkey.center = banana.center

了解原点和中心之间存在差异。点击此处了解更多信息:

UIView's frame, bounds, center, origin, when to use what?

但基于问题,我认为中心应该工作得很好而且更简单。