【发布时间】:2009-07-25 05:15:10
【问题描述】:
当您尝试在 iPhone 的笔记应用程序中删除笔记时,会弹出一个 UIActionSheet。该片材是半透明的(但不是黑色半透明的)。这是如何实现的?是否可以将 UIActionSheet 的背景设置为某种颜色?
【问题讨论】:
当您尝试在 iPhone 的笔记应用程序中删除笔记时,会弹出一个 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];
}
【讨论】:
你可以使用下面的代码:
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 值来调整不透明度。 Interface Builder 允许您直接编辑值,但在代码中我认为您会这样做:
[[myActionSheet view] setOpaque:NO];
[[myActionSheet view] setAlpha:0.5];
我不确定您是否需要 setOpaque 调用 - 我认为它用于帮助优化性能,因为 iPhone 不会尝试渲染不透明视图隐藏的任何内容。
【讨论】:
在我看来它是黑色的(注意:使用 2.2.1)。它有颜色的唯一原因是它背后的黄色。
一种选择是使用黑色透明背景并找出操作表的大小和速度。然后创建一个视图并为其设置动画,同时在其下方显示操作表,使其具有与操作表后面的自然颜色不同的色调。您必须使颜色视图也半透明,这样您也可以看到其背后。
我不确定你是否可以,但你也可以尝试调整操作表本身的不透明度。
【讨论】: