当您尝试删除iPhone的Notes应用程序中的注释时,会弹出一个UIActionSheet。片材是半透明的(但不是黑色半透明)。这是如何实现的?是否有可能使UIActionSheet的背景成为某种颜色?
答案 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)。有颜色的唯一原因是它背后的黄色。
一种选择是使用黑色透明背景并找出操作表的大小和速度。然后在显示操作表的同时创建一个视图并为其设置动画,就在它下面,给它一个不同于操作表后面的颜色的色调。你必须使颜色视图也是半透明的,所以你也可以在后面看到它。
我不确定你是否可以,但你也可以尝试调整动作表本身的不透明度。