web-dev-qa-db-ja.com

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)")
}

サルのみを更新し、ビュー全体をリセットしない方法についてのアイデアはありますか?

ありがとう:)

以下の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のOriginをbananaのOriginに設定するだけなので、monkeyのサイズとmonkeyのOriginでbananaの新しいフレームを作成することにより、すべてのvar宣言を削除し、これを1行に減らすことができます。

monkey.frame = CGRect(Origin: banana.frame.Origin, size: monkey.frame.size)
21
BergQuester

こんにちはあなたが望むならこれを拡張して作成します。 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)
5
YannSteph

今できる

monkey.frame.Origin = banana.frame.Origin
1
Dmitry Kozlov

サルとバナナにUIImageViewを使用している場合は、次のようにしてこれを簡略化できます。

monkey.center = banana.center

原点と中心に違いがあることを理解してください。詳細はこちら:

IViewのフレーム、境界、中心、原点、何を使用するか?

しかし、質問に基づいて、私はセンターがうまく機能するべきだと思います、そしてそれはより簡単です。

0
caesss