Vos options:
1) Créer une Fonction statique C pour le faire
static UIImageView* myfunc(CGFloat x, CGFloat y, CGFloat w, CGFloat h,
NSString* name, NSString* type, UIView* parent) {
UIImageView *imgView = [[UIImageView alloc] initWithFrame:
CGRectMake(x,y,w,h)];
imgView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:name ofType:type]];
[self.view addSubView:imgView];
[imgView release];
return imgView;
}
2) Insérer un C macro
#define CREATE_ICON_VIEW(parent,x,y,w,h,name) \
...
3) créer une méthode statique Objective-C
// in @interface section
+ (UIImageView*)addIconWithRect:(CGRect)rect name:(NSString*)name
type:(NSString*)type toView:(UIView*)view;
// in @implementation section
+ (UIImageView*)addIconWithRect:(CGRect)rect name:(NSString*)name
type:(NSString*)type toView:(UIView*)view {
UIImageView *imgView = [[UIImageView alloc] initWithFrame:rect];
imgView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:name ofType:type]];
[self.view addSubView:imgView]; }
[imgView release];
return imgView;
}
// somewhere in app code
[MyClass addIconWithRect:CGMakeRect(0,0,32,32) name:@"ico-date"
type:@"png" toView:parentView];
4) créer une catégorie Objective-C sur UIImage ou UIImageView
5) Insérer un méthode sur la vue qui doit avoir un UIImageView ajouté
- (void)addIconWithRect:(CGRect)rect name:(NSString*)name type:(NSString*)type {
UIImageView *imgView = [[UIImageView alloc] initWithFrame:rect];
imgView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:name ofType:type]];
[self.view addSubView:imgView]; }
[imgView release];
return imgView;
}
6) Créer un assistant ss
Comme l'option (3), mais mettre les méthodes statiques dans une classe distincte qui est juste pour les méthodes d'utilité pour les sections répétées de code par exemple appeler la classe d'aide « UIUtils ».
7) Utiliser une fonction en ligne C
static inline UIImageView* myfunc(CGFloat x, CGFloat y, CGFloat w, CGFloat h,
NSString* name, NSString* type, UIView* parent) {
UIImageView *imgView = [[UIImageView alloc] initWithFrame:
CGRectMake(x,y,w,h)];
imgView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:name ofType:type]];
[self.view addSubview:imgView];
[imgView release];
return imgView;
}
8) utiliser une boucle pour exécuter le même code à plusieurs reprises
9) utiliser une méthode non statique-C Objectif ordinaire
personnellement Je n'irais pour aucun de ceux-ci pour votre exemple particulier et je l'écrirais simplement à main levée, à moins qu'il ne soit répété plus de dix fois dans un fichier auquel cas je pourrais y aller (3). Si c'est utilisé dans beaucoup de fichiers, je pourrais y aller (6). Éditer: Les descriptions étendues pour (3) et (6) et noter quand j'utilise (6).
Édition: Options ajoutées 8 & 9. Correction de fuites de mémoire et de certaines erreurs.
Modifier: Code mis à jour pour utiliser imageWithContentsOfFile au lieu de imageNamed.
Il existe un problème de mise en mémoire cache avec les images et imageNamed :. Vous devriez probablement utiliser imageWithContentsOfFile: pathForResource: ofType :. Voir aussi http://stackoverflow.com/questions/806374/iphone-most-memory-effecient-way-to-initialize-an-image. – martinr
Désolé je voulais dire: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @ "ico-date" deType: @ "png"]]. – martinr