更新UIImageView的位置 Swift

10

我想让可拖动的图片(猴子)在按下按钮时取代另一张可拖动的图片(香蕉)。迄今为止,我已经能够获取香蕉的坐标,并将它们存储为猴子的新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个回答

22

当您设置下面的monkeyxmonkeyy时,这些值将被丢弃。

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

将以下值分配只会将一个本地变量的值分配给另一个变量,实际上并不会更改monkey的坐标。

monkeyx = bananax
monkeyy = bananay

你需要通过构建一个新的CGRect并分配给monkeyframe来设置猴子的新坐标:

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

由于您只是将monkey的起点设置为banana的起点,因此可以删除所有var声明,并通过使用monkey的大小和banana的起点构建monkey的新帧将其简化为一行:

monkey.frame = CGRect(origin: banana.frame.origin, size: monkey.frame.size)

完成了!谢谢!我将NSRect更改为CGRect,因为我正在开发iOS。 - Nicolas Kalogeropoulos
相关问题:现在猴子出现在香蕉下面。有没有办法改变层优先级并将猴子放在顶部? - Nicolas Kalogeropoulos
关于你的第二个问题:https://dev59.com/HG445IYBdhLWcg3w6efz - BergQuester

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)

1
现在你可以做到。
monkey.frame.origin = banana.frame.origin

0
如果您正在使用UIImageView来显示猴子和香蕉,您可以通过以下方式简化代码:
monkey.center = banana.center

了解原点和中心之间的区别。在此处查看更多信息:

UIView的frame、bounds、center、origin,何时使用什么?

但根据问题,我认为中心应该可以很好地工作,而且更简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接