2013-07-09 21 views
11

Pratico codice principiante da quando sono nuovo e ho avuto un sacco di confusione qui ... questo è quello che ho finoraAggiunta di una vista UIImage come subView a un'istanza di UIView

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

Non capisco cosa e perché qualcosa qui è sbagliato, qualcuno può aiutare?

+0

Che cosa vedi accadere? Immagino che il tuo 'catView' abbia una cornice zero quindi non mostrerà troppo bene – Wain

+0

la sua parte della sfida del codice di un sito di apprendimento chiamata Treehouse così l'editor è online e non mostra una simulazione :( –

+0

Quindi il sito ti dice qualcosa è sbagliato e ti chiede cosa? Puoi copiare il codice in un progetto e provare a eseguirlo ... – Wain

risposta

26
//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]; 
+0

' catView' non ha una proprietà 'view'. – rmaddy

+0

oh sì, l'ho visto ma ho dimenticato di rimuoverlo quando ho commentato il codice – soryngod

0

Interessante e sottile nota. Se le viste sono già state aggiunte in un file .xib, le visualizzazioni sono "deboli" e devi scambiare con una variabile temporanea. Anche alcuni semplici calcoli matematici per ottenere le coordinate corrispondenti a quelle che hai impostato nella tua vista:

@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;