2015-06-07 16 views
12

Per un'applicazione sto rendendo necessario utilizzare variabili per modificare la dimensione e la posizione degli oggetti (etichette). Ho provato var example = CGRectMake(0, 0, 0, 100), sperando che ignorasse gli zeri (non pensarlo davvero sarebbe però). Allora ho provato:Utilizzo di variabili in CGRectMake, Swift, UIkit

var example = 100 
Label1.frame = CGRectMake(20, 20, 50, example) 

ho cambiato la sintassi un po ', aggiungendo "" e sostituendo la CGRectMake con CGRect ecc, ma niente ha funzionato ... Non capisco quello che sto facendo male qui ... Aiuto!

+0

salvare il riquadro del vecchio la bel quindi imposta quei valori come quelli che rimangono invariati nella nuova posizione – cyril

risposta

3

CGRectMake prende CGFloat s per tutti i suoi argomenti. Il tuo codice di esempio dovrebbe funzionare bene se si specifica che example si suppone essere un CGFloat, utilizzando un tipo di identificatore:

  // v~~~~ add this... 
var example: CGFloat = 100 
Label1.frame = CGRectMake(20, 20, 50, example) 

In caso contrario, veloce deduce il tipo di example essere Int, e la chiamata a CGRectMake fallisce, cuz non può assumere un Int come parametro ...

+5

Questa risposta è superata. Vedi sotto. –

1

Quindi, ci sono molti modi per scuoiare il gatto. Tutto dipende da quali sono i tuoi bisogni e le tue esigenze (forse potresti approfondire un po 'quello che stai cercando di ottenere?). Ma un modo per farlo potrebbe essere impostare una variabile quando succede qualcosa, e quindi aggiornare la cornice dell'etichetta. Se è stato aggiunto un rubinetto gesto riconoscitore alla vista, e aggiornato l'etichetta in questo modo:

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

Questo è solo un esempio, e un modo molto crudo di farlo. Ci sono molti altri modi per farlo, ma si spera che ti dia un'idea di come ottenerlo.

0

Swift permette sintassi Objective-C non è così:

var example = 100 
label.frame.size.height = example 

in Objective-C che avrebbe dovuto farlo in modo diverso:

CGRect frame = label.frame; //Create a temporary rect to hold the frame value 
frame.size.height = example; 
label.frame = frame; 
63

Swift aggiornamento 3

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) 
+1

Grazie amico! Mi ha salvato un po 'di tempo. :) – Wouter125