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

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

我通常实现下面的委托方法:

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

您可以使用下面的代码:

 actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque; 

要么

 actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 
 actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent; 

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

 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 } 

你一定可以通过设置alpha值来调整不透明度。 界面生成器可以让你直接编辑值,但在代码中,我认为你会做:

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

我不知道你是否需要setOpaque调用 – 我认为这是用来帮助优化性能,因为iPhone不会尝试呈现任何隐藏的不透明视图。

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

一种select是使用黑色的透明背景,并找出动作表的大小和速度。 然后创build一个视图,并在显示动作表的同时显示animation,使其与动作表背后的颜色不同。 你将不得不使颜色视图也是半透明的,所以你也可以看到背后。

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