2009-07-25 3 views

Antwort

24

ich in der Regel die folgenden Delegatmethode implementieren:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 

Nur um eine Probe. In diesem Fall verwende ich eine gestreckte png als Hintergrund:

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

und das ist das Ergebnis: alt text http://grab.by/4yF1

+2

Hey, kannst du bitte einen Link zu diesem Bild posten?Es sieht wirklich nett aus, danke und großartige Lösung, um das Hintergrundbild zu ersetzen! – JonasG

+0

das funktioniert nicht für mich !!! – Fay007

0

Es sieht schwarz für mich aus (Hinweis: mit 2.2.1). Der einzige Grund, warum es eine Farbe gibt, ist wegen des Gelbs dahinter.

Eine Option wäre, den schwarz-transparenten Hintergrund zu verwenden und die Größe und Geschwindigkeit des Aktionsblatts herauszufinden. Erstellen Sie dann eine Ansicht und animieren Sie sie, während Sie das Aktionsblatt direkt darunter anzeigen, um eine andere Farbe als die Farbe hinter dem Aktionsblatt zu erhalten. Sie müssten die Farbansicht auch durchscheinend machen, damit Sie auch dahinter sehen können.

Ich bin mir nicht sicher, ob Sie das können, aber Sie können auch versuchen, die Deckkraft des Action Sheets selbst anzupassen.

+0

Einstellen der Die Opazität des Aktionsblatts wirkt sich auch auf die Schaltflächen aus. – Boon

+0

Wenn Sie sich die Notizenanwendung ansehen, werden Sie feststellen, dass die Schaltflächen nicht zu 100% undurchsichtig sind. –

1

Sie können die Deckkraft auf jeden Fall anpassen, indem Sie den Alpha-Wert einstellen. Interface Builder können Sie den Wert direkt bearbeiten, aber in Code ich glaube, Sie tun würde:

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

Ich bin nicht sicher, ob Sie die setOpaque Anruf brauchen oder nicht - ich denke, das verwendet wird, um die Leistung zu optimieren, wie Das iPhone versucht nicht, durch die undurchsichtige Ansicht etwas zu rendern.

5

Es ist nicht zu schwierig. Sie können den folgenden Code verwenden:

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

So stellen Sie sicher, dass Sie die UIActionSheet präsentieren, bevor diese oder die Größe wird nicht eingestellt werden, zu tun. Das macht es ein bisschen hässlich, aber man könnte so etwas wie tun:

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

Wenn Sie stattdessen die Größe an die Ansicht binden, müssen Sie den späteren Teil nicht ausführen. Außerdem musste x und y durch Höhe und Breite ersetzt werden: CGSize mySize = self.view.bounds.size; CGRect myRect = CGRectMake (0, 0, mySize.height, mySize.width); – StuartM

+0

Verwenden von - (void) willPresentActionSheet: (UIActionSheet *) actionSheet ist ein besserer Hook im Allgemeinen –

+0

Sie können auch ein Bild anstelle einer Farbe verwenden, indem Sie ein UIImage auf die UIImageView festlegen: [actionBackground setImage: [UIImage imageNamed: @ "captainplanet. png "]]; – ninehundredt

14

Sie den Code unten verwenden:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque; 

oder

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
+0

Danke, das ist genau das, was ich gesucht habe – GeneCode

6
actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
Verwandte Themen