iPhone开发:如何为UIActionSheet创建彩色或半透明背景?

时间:2009-07-25 05:15:11

标签: iphone uikit

当您尝试删除iPhone的Notes应用程序中的注释时,会弹出一个UIActionSheet。片材是半透明的(但不是黑色半透明)。这是如何实现的?是否有可能使UIActionSheet的背景成为某种颜色?

6 个答案:

答案 0 :(得分:24)

我通常实现以下委托方法:

- (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

答案 1 :(得分:14)

您可以使用以下代码:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque;

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;

答案 2 :(得分:6)

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;

答案 3 :(得分:5)

这并不太难。您可以使用以下代码:

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
}

答案 4 :(得分:1)

您可以通过设置Alpha值来调整不透明度。 Interface Builder允许您直接编辑值,但在代码中我认为您会这样做:

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

我不确定你是否需要setOpaque调用 - 我认为这用于帮助优化性能,因为iPhone不会尝试渲染隐藏视图隐藏的任何内容。

答案 5 :(得分:0)

对我来说看起来很黑(注意:使用2.2.1)。有颜色的唯一原因是它背后的黄色。

一种选择是使用黑色透明背景并找出操作表的大小和速度。然后在显示操作表的同时创建一个视图并为其设置动画,就在它下面,给它一个不同于操作表后面的颜色的色调。你必须使颜色视图也是半透明的,所以你也可以在后面看到它。

我不确定你是否可以,但你也可以尝试调整动作表本身的不透明度。