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,使其与动作表背后的颜色不同。 你将不得不使颜色视图也是半透明的,所以你也可以看到背后。
我不确定是否可以,但也可以尝试调整操作表本身的不透明度。