Objective-C: un’alternativa all’uso di CGRectMake
lunedì 27 luglio, 2009CGRectMake() è una funzione (in realtà è un inline #define) molto usata soprattutto quando si creano da codice oggetti grafici o di interfaccia utente. Il suo utilizzo è quindi spesso legato all'inizializzazione di componenti UIKit, ma anche a semplici UIView o UIImageView. CGRectMake() restituisce una struct (struttura di tipo) CGRect:
-
struct CGRect {
-
CGPoint origin;
-
CGSize size;
-
};
-
typedef struct CGRect CGRect;
Che a sua volta è composta da due diverse struct CGPoint e CGSize:
-
struct CGPoint {
-
CGFloat x;
-
CGFloat y;
-
};
-
typedef struct CGPoint CGPoint;
-
-
/* Sizes. */
-
-
struct CGSize {
-
CGFloat width;
-
CGFloat height;
-
};
-
typedef struct CGSize CGSize;
Che, a loro volta ancora, contengono tipi CGFloat, ovvero tipi float. Se andiamo ad analizzare il codice della CGRectMake() troviamo:
-
CG_INLINE CGRect
-
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
-
{
-
CGRect rect;
-
rect.origin.x = x; rect.origin.y = y;
-
rect.size.width = width; rect.size.height = height;
-
return rect;
-
}
Ne deriva, quindi, che questa parte di codice:
-
UIButton *gbutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
-
gbutton.frame = CGRectMake (12,409,100,40);
-
[gbutton setTitle:@"Press" forState:UIControlStateNormal];
-
[mainWindow addSubview:gbutton];
Potrebbe, a ragione, essere scritta anche come:
-
UIButton *gbutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
-
gbutton.frame = (CGRect) {12,409,100,40};
-
[gbutton setTitle:@"Press" forState:UIControlStateNormal];
-
[mainWindow addSubview:gbutton];
Giusto per velocizzare un po' l'esecuzione del codice...











19

Curiosita': se si volesse imparare l'Obj-C, diciamo, da zero o quasi, a quali pubblicazioni ci si puo' rivolgere?
@Cristian: cerca su Google Book (Google Libri) ci sono molte risorse (in inglese) quasi complete.