разработка iPhone: Как создать окрашенный или полупрозрачный фон для UIActionSheet?

Создание новых типов полностью динамическим способом

>>> NewType = type("NewType", (object,), {"x": "hello"})
>>> n = NewType()
>>> n.x
"hello"

, который является точно тем же как

>>> class NewType(object):
>>>     x = "hello"
>>> n = NewType()
>>> n.x
"hello"

, Вероятно, не самая полезная вещь, но хороший знать.

Редактирование : Фиксированное название нового типа, должен быть NewType, чтобы быть той же самой вещью как с class оператор.

Редактирование : Скорректированный заголовок, чтобы более точно описать функцию.

9
задан Judah Gabriel Himango 25 July 2009 в 05:29
поделиться

5 ответов

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

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

и вот результат: alt text http://grab.by/4yF1

24
ответ дан 4 December 2019 в 06:02
поделиться

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

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

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

0
ответ дан 4 December 2019 в 06:02
поделиться

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

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

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

1
ответ дан 4 December 2019 в 06:02
поделиться

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

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

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

[myActionSheet showInView:self.view];
if (!redAdded) {
    redAdded = YES;
    //THE ABOVE CODE GOES HERE
}
5
ответ дан 4 December 2019 в 06:02
поделиться

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

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque;

или

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
14
ответ дан 4 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: