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

Boo*_*oon 9 iphone uikit

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

mar*_*cio 24

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

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
Run Code Online (Sandbox Code Playgroud)

只是为了做一个样本.在这种情况下,我使用拉伸的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];
}
Run Code Online (Sandbox Code Playgroud)

这就是结果: alt text http://grab.by/4yF1

  • 嘿,你可以发一个链接到那张图片吗?它看起来非常好,谢谢和更换背景图片的绝佳解决方案! (2认同)

raa*_*aaz 14

您可以使用以下代码:

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackOpaque;
Run Code Online (Sandbox Code Playgroud)

要么

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)


Kas*_*sem 6

actionSheetObj.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)


Dav*_*rek 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];
Run Code Online (Sandbox Code Playgroud)

只需确保在执行此操作之前提供UIActionSheet,否则将无法设置大小.这有点难看,但你可以这样做:

[myActionSheet showInView:self.view];
if (!redAdded) {
    redAdded = YES;
    //THE ABOVE CODE GOES HERE
}
Run Code Online (Sandbox Code Playgroud)