2011-11-09 4 views
10

enter image description hereiphone - Come posso produrre un'immagine con angoli arrotondati e ombre?

qualcosa esattamente come sopra?

so come produrre un angolo arrotondato:

imageView.layer.cornerRadius = 10; 
imageView.layer.shouldRasterize = YES; 
imageView.layer.masksToBounds = YES; 

per l'ombra, ho provato

imageView.layer.shadowOffset = CGSizeMake(1, 1); 
imageView.layer.shadowRadius = 5; 
imageView.layer.shadowOpacity = 0.4; 
imageView.layer.shadowColor = [UIColor blackColor].CGColor; 
imageView.layer.shouldRasterize = YES; 

Ma imageView.layer.masksToBounds = YES; da angolo arrotondato uccide l'ombra.

Un'altra domanda è che come si produce un'ombra esattamente come mostrato nell'immagine? Ho prodotto questa immagine in Photoshop, ho usato 120 gradi come direzione della luce. Ma se ho usato il codice sopra, e disattivare maskToBounds, posso vedere l'ombra ed è brutto.

Oppure è possibile produrre un angolo arrotondato + una cornice di immagine shadow in Photoshop e applicare la cornice a ogni immagine nella mia app? Penso che darà prestazioni migliori. ombreggiare e curvare le immagini al volo avrà prestazioni terribili se tutte le immagini sono su una pergamena.

Grazie

risposta

0

Vorrei utilizzare due visualizzazioni di immagine. Una foto di sfondo che ha l'ombra (può essere riutilizzata per ogni immagine) e l'immagine png in primo piano che ha gli angoli arrotondati.

4

Prova questo:

CALayer *sublayer = [CALayer layer]; 
sublayer.backgroundColor = [UIColor blueColor].CGColor; 
sublayer.shadowOffset = CGSizeMake(0, 3); 
sublayer.shadowRadius = 5.0; 
sublayer.shadowColor = [UIColor blackColor].CGColor; 
sublayer.shadowOpacity = 0.8; 
sublayer.frame = CGRectMake(30, 30, 128, 192); 
sublayer.borderColor = [UIColor blackColor].CGColor; 
sublayer.borderWidth = 2.0; 
sublayer.cornerRadius = 10.0; 
[self.view.layer addSublayer:sublayer]; 

CALayer *imageLayer = [CALayer layer]; 
imageLayer.frame = sublayer.bounds; 
imageLayer.cornerRadius = 10.0; 
imageLayer.contents = (id) [UIImage imageNamed:@"BattleMapSplashScreen.jpg"].CGImage; 
imageLayer.masksToBounds = YES; 
[sublayer addSublayer:imageLayer]; 

E prendere cerca nella original source

-1

Probabilmente si desidera utilizzare un livello diverso per shadowing, e mantenere il codice masksToBounds e arrotondamento. In questo esempio imageView è il nome della vista dell'immagine che si desidera ombra e rotondo:

CALayer *shadowLayer = [[[CALayer alloc] init] autorelease]; 
sublayer.frame = imageView.bounds; 
sublayer.masksToBounds = NO; 
sublayer.shadowOffset = CGSizeMake(1, 1); 
sublayer.shadowRadius = 5; 
sublayer.shadowOpacity = 0.4; 
sublayer.shadowColor = [UIColor blackColor].CGColor; 
sublayer.shouldRasterize = YES; 

[imageView.layer insertSublayer:shadowLayer atIndex:0]; // Put it underneath the image 

Questo dovrebbe darvi l'ombra. Ora per evitare il lento ricalcolo, suggerisco di creare un UIImage fuori dall'immagine. Vedi questo link: Create UIImage from shadowed view while retaining alpha?.

Spero che questo aiuti!