J'essaie de créer une image déplaçable (singe) à la place d'une autre image déplaçable (banane) lorsque j'appuie sur un bouton.
Jusqu'à présent, j'ai pu obtenir les coordonnées de la banane et les stocker en tant que nouvelles coordonnées x, y du singe. Cependant, la vue ne se met pas à jour et le singe ne se déplace pas vers son nouvel emplacement.
Je suis sûr que je dois mettre à jour la vue, mais je ne peux pas le comprendre. J'ai essayé d'ajouter une nouvelle sous-vue (self.view.addSubview (monkey)), mais lorsque je le fais, c'est la vue entière qui est réinitialisée et le singe et la banane reviennent à leurs coordonnées d'origine.
Voici le code du bouton d'action:
@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)")
}
Une idée sur la façon de mettre à jour uniquement le singe et de ne pas réinitialiser la vue entière?
Merci :)
Ces valeurs sont simplement supprimées lorsque vous définissez monkeyx
et monkeyy
ci-dessous.
var monkeyx = monkey.frame.Origin.x
var monkeyy = monkey.frame.Origin.y
L'affectation des valeurs ci-dessous affecte uniquement les valeurs d'une variable locale à une autre. Cela ne change pas réellement les coordonnées pour monkey
.
monkeyx = bananax
monkeyy = bananay
Vous devez définir les nouvelles coordonnées sur monkey en construisant une nouvelle variable CGRect
et en affectant la variable monkey
à frame
:
monkey.frame = CGRect(x: bananax, y: bananay, width: monkey.frame.size.width, height: monkey.frame.size.height)
Comme vous définissez simplement Origin de monkey
sur banana
, vous pouvez supprimer toutes les déclarations var et les réduire à une ligne en construisant le nouveau cadre de monkey
avec la taille de monkey
et son origine de banana
:
monkey.frame = CGRect(Origin: banana.frame.Origin, size: monkey.frame.size)
Salut créer cela s'étend si vous voulez. Pour Swift
Create File Extends.Swift et ajouter ce code
/**
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
}
}
For Use (hérite de UIView)
inheritsOfUIView.setX(x: 100)
button.setX(x: 100)
view.setY(y: 100)
Maintenant tu peux faire
monkey.frame.Origin = banana.frame.Origin
Si vous utilisez UIImageView pour singe et banane, vous pouvez le simplifier en procédant comme suit:
monkey.center = banana.center
Comprenez qu'il y a une différence entre l'origine et le centre. Voir plus ici:
Le cadre d'UIView, limites, centre, origine, quand utiliser quoi?
mais sur la base de la question, je pense que le centre devrait bien fonctionner et il est plus simple.