2009-07-25 14 views

risposta

24

Io di solito attuare i seguenti metodo delegato:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 

solo per fare un esempio. In questo caso io uso un allungato png come sfondo:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    UIImage *theImage = [UIImage imageNamed:@"detail_menu_bg.png"];  
    theImage = [theImage stretchableImageWithLeftCapWidth:32 topCapHeight:32]; 
    CGSize theSize = actionSheet.frame.size; 
    // draw the background image and replace layer content 
    UIGraphicsBeginImageContext(theSize);  
    [theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];  
    theImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    [[actionSheet layer] setContents:(id)theImage.CGImage]; 
} 

e questo è il risultato: alt text http://grab.by/4yF1

+2

Ehi, per favore potresti postare un link a quell'immagine?Sembra davvero bello, grazie e ottima soluzione per sostituire l'immagine di sfondo! – JonasG

+0

questo non funziona per me !!! – Fay007

0

Mi sembra nero (nota: uso 2.2.1). L'unica ragione per cui c'è un colore è a causa del giallo dietro di esso.

Un'opzione sarebbe quella di utilizzare lo sfondo nero trasparente e scoprire le dimensioni e la velocità del foglio di azione. Quindi crea una vista e animala nello stesso momento in cui mostri il foglio di azione, appena sotto di esso, per dargli una tinta diversa rispetto al colore naturale dietro al foglio di azione. Dovresti rendere la visualizzazione a colori anche traslucida in modo da poter vedere anche quella dietro.

Non sono sicuro che sia possibile, ma si potrebbe anche provare a regolare anche l'opacità del foglio di azione.

+0

Regolazione del l'opacità del foglio d'azione influisce anche sui pulsanti. – Boon

+0

Se date un'occhiata all'applicazione note, noterete che i pulsanti non sono opachi al 100%. –

1

È possibile regolare l'opacità impostando il valore alfa. Interface Builder consente di modificare direttamente il valore, ma nel codice credo che si dovrebbe fare:

[[myActionSheet view] setOpaque:NO]; 
[[myActionSheet view] setAlpha:0.5]; 

non sono sicuro se è necessario la chiamata setOpaque o no - credo che viene utilizzato per aiutare a ottimizzare le prestazioni, come l'iPhone non tenterà di rendere nulla nascosto dalla vista opaca.

5

Non è troppo difficile. È possibile utilizzare il seguente codice:

CGSize mySize = myActionSheet.bounds.size; 
CGRect myRect = CGRectMake(0, 0, mySize.width, mySize.height); 
UIImageView *redView = [[[UIImageView alloc] initWithFrame:myRect] autorelease]; 
[redView setBackgroundColor:[UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5]]; 
[myActionSheet insertSubview:redView atIndex:0]; 

Basta fare in modo di presentare le UIActionSheet prima di fare questo o la dimensione solito essere impostato. Questo lo rende sorta di brutto, ma si potrebbe fare qualcosa di simile:

[myActionSheet showInView:self.view]; 
if (!redAdded) { 
    redAdded = YES; 
    //THE ABOVE CODE GOES HERE 
} 
+0

Se si vincola la dimensione alla vista, non si dovrebbe eseguire la parte successiva. Dovevo anche sostituire xey con altezza e larghezza: CGSize mySize = self.view.bounds.size; CGRect myRect = CGRectMake (0, 0, mySize.height, mySize.width); – StuartM

+0

Utilizzo - (void) willPresentActionSheet: (UIActionSheet *) actionSheet è un aggancio migliore in generale –

+0

È inoltre possibile utilizzare un'immagine anziché un colore impostando una UIImage su UIImageView: [actionBackground setImage: [UIImage imageNamed: @ "captainplanet. png "]]; – ninehundredt

14

È possibile utilizzare il codice qui sotto:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque; 

o

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
+0

Grazie, questo è esattamente quello che stavo cercando – GeneCode

6
actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
Problemi correlati