2014-05-07 15 views
13

Non riesco a trovare dove l'ho letto, ma ricordo di aver trovato qualcosa che suggeriva che fosse meglio accedere all'altezza di CGRect s utilizzando CGRectGetHeight(rect) invece di accedere alla variabile tramite rect.size.heightMeglio usare CGRectGetHeight (view.bounds) o view.bounds.size.height direttamente in Objective-C

CGFloat height = CGRectGetHeight(self.frame); 
// vs 
CGFloat height = self.frame.size.height; 

la maggior parte del tempo, questo ha a che fare con una vista a mio uso, e mi chiedevo se esiste una reale differenza (a parte la sintassi) che separa queste due linee di codice.

Se uno è preferenziale rispetto all'altro, una spiegazione del perché sarebbe fantastico!

risposta

19

Le strutture CGRect possono memorizzare altezza e larghezza in valori negativi e CGRectGetHeight restituirà sempre quella positiva. In Swift 3.0 è necessario utilizzare la proprietà CGRect.height anziché CGRectGetHeight.

CGRect.height

Regardless of whether the height is stored in the CGRect data structure as a positive or negative number, this function returns the height as if the rectangle were standardized. That is, the result is never a negative number.

+0

che è stato, non riuscivo a ricordare il motivo per cui ha detto! Grazie! Accetterò in 10 minuti. (quando mi consente) – Logan

+0

Più genericamente, dal [riferimento CGGeometry] (https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html): "Tutte le funzioni descritte in questo riferimento che prende le strutture di dati 'CGRect' come input codifica implicitamente quei rettangoli prima di calcolare i loro risultati. Per questo motivo, le tue applicazioni dovrebbero evitare di leggere e scrivere direttamente i dati memorizzati nella struttura dati 'CGRect'. Invece, usa le funzioni qui descritte per manipolare i rettangoli e recuperarne le caratteristiche. " –

+0

In Xcode 8.2.1 usando' CGRectGetHeight' si genera un errore di complicazione: "_CGRectGetHeight 'è stato sostituito dalla proprietà' CGRect.height'_". – RobertJoseph