Когда вы пытаетесь удалить заметку в приложении «Заметки» iPhone, появляется UIActionSheet. Лист полупрозрачный (но не черный полупрозрачный). Как этого добиться? Можно ли сделать фон UIActionSheet определенным цветом?

9
Boon 25 Июл 2009 в 09:15

6 ответов

Лучший ответ

Обычно я реализую следующий метод делегата:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet

Просто чтобы сделать образец. В этом случае я использую растянутый png в качестве фона:

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

И вот результат: замещающий текст http://grab.by/4yF1

24
Nekto 14 Сен 2011 в 08:13

Вы можете использовать приведенный ниже код:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque;

Или

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
14
DNA 28 Ноя 2012 в 23:18
actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
6
Kassem 5 Янв 2012 в 07:58

Это не так уж сложно. Вы можете использовать следующий код:

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

Просто убедитесь, что вы представили UIActionSheet, прежде чем делать это, иначе размер не будет установлен. Это выглядит некрасиво, но вы можете сделать что-то вроде:

[myActionSheet showInView:self.view];
if (!redAdded) {
    redAdded = YES;
    //THE ABOVE CODE GOES HERE
}
5
Kaolin Fire 1 Ноя 2012 в 00:55

Вы определенно можете настроить непрозрачность, установив значение альфа. Interface Builder позволяет вам редактировать значение напрямую, но я думаю, что в коде вы бы сделали:

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

Я не уверен, нужен ли вам вызов setOpaque или нет - я думаю, он используется для оптимизации производительности, поскольку iPhone не будет пытаться визуализировать что-либо, скрытое непрозрачным представлением.

1
Dan J 27 Авг 2009 в 14:08

Мне он кажется черным (примечание: с использованием 2.2.1). Единственная причина, по которой он имеет цвет, - это желтый цвет за ним.

Один из вариантов - использовать черный прозрачный фон и узнать размер и скорость листа действий. Затем создайте представление и анимируйте его в то же самое время, когда вы показываете лист действий, прямо под ним, чтобы придать ему оттенок, отличный от естественного цвета за листом действий. Вам нужно будет сделать цветной вид также полупрозрачным, чтобы вы могли видеть и за ним.

Не уверен, сможете ли вы, но вы также можете попробовать отрегулировать непрозрачность самого листа действий.

0
Ed Marty 25 Июл 2009 в 14:42