当我按下按钮时,我正试图制作一个可拖动的图像(猴子)取代另一个可拖动的图像(香蕉)。
到目前为止,我已经能够获得香蕉的坐标,并将它们存储为猴子的新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)")
}
有关如何仅更新猴子而不重置整个视图的想法吗?
谢谢:)
答案 0 :(得分:20)
当您在下面设置monkeyx
和monkeyy
时,这些值就会被丢弃。
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?
但基于问题,我认为中心应该工作得很好而且更简单。