Pour une application que je crée, je dois utiliser des variables pour changer la taille et la position des objets (étiquettes). J'ai essayé var example = CGRectMake(0, 0, 0, 100)
, en espérant qu'il ignore les zéros (je n'y pense pas vraiment aurait bien que). J'ai alors essayé:
var example = 100
Label1.frame = CGRectMake(20, 20, 50, example)
J'ai un peu changé la syntaxe, en ajoutant "" et en remplaçant CGRectMake
par CGRect
etc., mais rien n'a fonctionné ... Je ne comprends pas ce que je fais mal ici ... Aide!
CGRectMake
prend CGFloat
s pour tous ses arguments. Votre exemple de code devrait fonctionner correctement si vous spécifiez que example
est censé être un CGFloat
, à l'aide d'un identificateur de type:
// v~~~~ add this...
var example: CGFloat = 100
Label1.frame = CGRectMake(20, 20, 50, example)
Autrement, Swift déduit que le type de example
est Int
et que l'appel à CGRectMake
échoue, car il ne peut pas prendre un Int
comme paramètre ...
Mise à jour Swift 3
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
Donc, il y a beaucoup de façons de peler le chat. Tout dépend de vos besoins et de vos exigences (peut-être pourriez-vous élaborer un peu sur ce que vous essayez d’atteindre?). Mais une façon de le faire pourrait être de définir une variable lorsque quelque chose se produit, puis de mettre à jour le cadre de l'étiquette. Si vous avez ajouté un identificateur de gestes tactiles à votre vue et mis à jour votre étiquette de la manière suivante:
let myLabel = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
let tapGestRecog = UITapGestureRecognizer(target: self, action: "handleTap:")
self.view.addGestureRecognizer(tapGestRecog)
}
func handleTap(sender:UIGestureRecognizer) {
let newXposition = sender.locationInView(self.view).x
let newYposition = sender.locationInView(self.view).y
myLabel.frame = CGRectMake(newXposition, newYposition, 200, 200)
}
Ce n’est qu’un exemple, et une façon très rudimentaire de le faire. Il y a beaucoup d'autres façons de le faire, mais cela vous donne, espérons-le, une idée de la façon de le réaliser.
Swift autorise une syntaxe qu'Objective-C ne fait pas:
var example = 100
label.frame.size.height = example
En Objective-C, vous devriez le faire différemment:
CGRect frame = label.frame; //Create a temporary rect to hold the frame value
frame.size.height = example;
label.frame = frame;