2009-07-25 5 views

Répondre

24

je mets en œuvre généralement la méthode déléguée suivante:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 

Juste pour faire un échantillon. Dans ce cas, j'utilise un étiré .png comme arrière-plan:

- (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]; 
} 

et voici le résultat: alt text http://grab.by/4yF1

+2

Hey pourriez-vous s'il vous plaît poster un lien vers cette image?Ça a l'air vraiment sympa, merci et bonne solution pour remplacer l'image de fond! – JonasG

+0

cela ne fonctionne pas pour moi !!! – Fay007

0

Il me semble noir (note: en utilisant 2.2.1). La seule raison pour laquelle il y a une couleur est à cause du jaune derrière. Une option serait d'utiliser l'arrière-plan transparent noir et de trouver la taille et la vitesse de la feuille d'action. Créez ensuite une vue et animez-la en même temps que vous affichez la feuille d'action, juste en dessous, pour lui donner une teinte différente de la couleur naturellement derrière la feuille d'action. Vous devriez aussi rendre la vue en couleur translucide afin que vous puissiez voir derrière cela aussi.

Je ne sais pas si vous le pouvez, mais vous pouvez également essayer d'ajuster l'opacité de la feuille d'action elle-même.

+0

Réglage de la L'opacité de la feuille d'action affecte également les boutons. – Boon

+0

Si vous regardez l'application Notes, vous remarquerez que les boutons ne sont pas 100% opaques. –

1

Vous pouvez définitivement ajuster l'opacité en définissant la valeur alpha. Interface Builder vous permet de modifier directement la valeur, mais dans le code, je pense que vous feriez:

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

Je ne sais pas si vous avez besoin de l'appel setOpaque ou non - je pense qui est utilisé pour optimiser les performances, comme l'iPhone n'essaiera pas de rendre quelque chose caché par la vue opaque.

5

Ce n'est pas trop difficile. Vous pouvez utiliser le code suivant:

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

Assurez-vous que vous présentez le UIActionSheet avant de le faire ou la taille ne serez pas défini. Cela le rend laid genre de, mais vous pouvez faire quelque chose comme:

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

Si vous avez lié la taille à la vue, vous n'aurez pas à faire la dernière partie. A également dû remplacer x et y avec la taille et la largeur: CGSize mySize = self.view.bounds.size; CGRect myRect = CGRectMake (0, 0, mySize.height, mySize.width); – StuartM

+0

Utilisation de - (void) willPresentActionSheet: (UIActionSheet *) actionSheet est un meilleur hook en général –

+0

Vous pouvez également utiliser une image plutôt qu'une couleur en définissant un UIImage sur le UIImageView: [imageBlocketImage: [UIImage imageNamed: @ "captainplanet. png "]]; – ninehundredt

14

Vous pouvez utiliser le code ci-dessous:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque; 

ou

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
+0

Merci, c'est exactement ce que je cherchais – GeneCode

6
actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
Questions connexes