web-dev-qa-db-fra.com

Ajout d'une vue UIImage en tant que sous-vue à une instance d'UIView

Je pratique le code débutant depuis que je suis nouveau et je viens de rencontrer beaucoup de confusion ici ... c'est ce que j'ai jusqu'à présent 

UIView *catView = [[UIView alloc] init];
UIImage *image = [UIImage imageNamed:@"lolcat.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[catView.view addSubview:imageView];

Je ne comprends pas quoi et pourquoi quelque chose ne va pas ici, quelqu'un peut-il aider?

13
Danny Swan
//You need to specify the frame of the view   
UIView *catView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,400)];

UIImage *image = [UIImage imageNamed:@"lolcat.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

//specify the frame of the imageView in the superview , here it will fill the superview
imageView.frame = catView.bounds;

// add the imageview to the superview
[catView addSubview:imageView];

//add the view to the main view

[self.view addSubview:catView];
28
soryngod

Note intéressante et subtile. Si les vues ont déjà été ajoutées dans un fichier .xib, elles sont "faibles" et vous devez les échanger avec une variable temporaire. Également, quelques calculs simples pour obtenir les coordonnées correspondant à celles que vous avez définies dans votre vue:

@property (weak, nonatomic) IBOutlet UIImageView *imageView1;
@property (weak, nonatomic) IBOutlet UIImageView *imageView2;
CGRect tempFrame; 

tempFrame = self.imageView1.frame;

CGRect tempFrame;   // use bounds instead

tempFrame = self.imageView2.frame;

__strong UIImageView * tempView = self.imageView2;
[self.imageView2 willMoveToSuperview: nil];
[self.imageView2 removeFromSuperview];
[self.imageView2 willMoveToSuperview: self.imageView1];
[self.imageViewSkate addSubview: self.imageViewBall];
self.imageView2.frame = CGRectMake(tempFrame.Origin.x - self.imageView1.frame.Origin.x,
                                      tempFrame.Origin.y - self.imageView1.frame.Origin.y,
                                      tempFrame.size.width, tempFrame.size.height);
tempView = nil;
0
snibbe