ボタンを押すと、ドラッグ可能な画像(サル)が別のドラッグ可能な画像(バナナ)の代わりになるようにしています。
これまでのところ、バナナの座標を取得して、サルの新しい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)")
}
サルのみを更新し、ビュー全体をリセットしない方法についてのアイデアはありますか?
ありがとう:)
以下のmonkeyx
とmonkeyy
を設定すると、これらの値は破棄されます。
var monkeyx = monkey.frame.Origin.x
var monkeyy = monkey.frame.Origin.y
以下の値を割り当てると、あるローカル変数から別のローカル変数に値が割り当てられるだけです。実際にはmonkey
の座標は変更されません。
monkeyx = bananax
monkeyy = bananay
新しいCGRect
を作成し、monkey
のframe
を割り当てることにより、サルの新しい座標を設定する必要があります。
monkey.frame = CGRect(x: bananax, y: bananay, width: monkey.frame.size.width, height: monkey.frame.size.height)
monkey
のOriginをbanana
のOriginに設定するだけなので、monkey
のサイズとmonkey
のOriginでbanana
の新しいフレームを作成することにより、すべてのvar宣言を削除し、これを1行に減らすことができます。
monkey.frame = CGRect(Origin: banana.frame.Origin, size: monkey.frame.size)
こんにちはあなたが望むならこれを拡張して作成します。 Swiftの場合
Create File Extends.Swiftおよびaddこのコード
/**
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)
今できる
monkey.frame.Origin = banana.frame.Origin
サルとバナナにUIImageViewを使用している場合は、次のようにしてこれを簡略化できます。
monkey.center = banana.center
原点と中心に違いがあることを理解してください。詳細はこちら:
しかし、質問に基づいて、私はセンターがうまく機能するべきだと思います、そしてそれはより簡単です。