2009-07-25 6 views

Odpowiedz

24

zwykle realizują następujące metody Delegat:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 

tylko do próbki. W tym przypadku używam rozciągnięte png jako tło:

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

i jest to wynik: alt text http://grab.by/4yF1

+2

Hej, czy mógłbyś zamieścić link do tego obrazu?Wygląda naprawdę ładnie, dzięki i świetne rozwiązanie do zastąpienia obrazu tła! – JonasG

+0

to nie działa dla mnie !!! – Fay007

0

Wygląda na czarno (uwaga: za pomocą 2.2.1). Jedynym powodem jest kolor, ponieważ żółty za nim.

Jedną z opcji jest użycie czarnego przezroczystego tła i określenie rozmiaru i szybkości arkusza czynności. Następnie utwórz widok i animuj go w tym samym czasie, gdy pokazujesz arkusz akcji, tuż pod nim, aby nadać mu odcień inny niż kolor naturalnie za arkuszem akcji. Musiałbyś sprawić, aby widok kolorów był również półprzezroczysty, abyś mógł to zobaczyć również za tym.

Nie jestem pewien, czy możesz, ale możesz także spróbować dopasować przezroczystość samego arkusza akcji.

+0

Dostosowanie krycie arkusza akcji wpływa również na przyciski. – Boon

+0

Jeśli spojrzysz na aplikację Notatki, zauważysz, że przyciski nie są w 100% nieprzejrzyste. –

1

Możesz zdecydowanie ustawić krycie, ustawiając wartość alfa. Interfejs Builder pozwala edytować wartość bezpośrednio, ale w kodzie sądzę byś zrobił:

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

Nie jestem pewien, czy trzeba połączenia setOpaque czy nie - myślę, że jest używany do optymalizacji wydajności, jak iPhone nie będzie próbował renderować niczego ukrytego w nieprzezroczystym widoku.

5

To nie jest trudne. Można użyć następującego kodu:

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

tylko upewnij się przedstawić UIActionSheet przed wykonaniem tego czy wielkość przyzwyczajenie być ustawiony. To sprawia, że ​​rodzaj brzydki, ale można zrobić coś takiego:

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

Jeśli ograniczysz rozmiar do widoku, nie będziesz musiał wykonywać późniejszej części. Musiał również zastąpić xiy wysokością i szerokością: CGSize mySize = self.view.bounds.size; CGRect myRect = CGRectMake (0, 0, mySize.height, mySize.width); – StuartM

+0

Używanie - (void) willPresentActionSheet: (UIActionSheet *) actionSheet jest lepszym haczykiem ogólnie –

+0

Można również użyć obrazu zamiast koloru, ustawiając UIImage do UIImageView: [actionBackground setImage: [UIImage imageNamed: @ "captainplanet. png "]]; – ninehundredt

14

można użyć poniższy kod:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque; 

lub

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
+0

Dzięki, właśnie tego szukałem – GeneCode

6
actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;