web-dev-qa-db-fra.com

Utilisation de variables dans CGRectMake, Swift, UIkit

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!

13
Mats

CGRectMake prend CGFloats 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 ...

4
Aaron Rasmussen

Mise à jour Swift 3

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
66
quemeful

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.

1
Chris

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;
0
Duncan C