Objective-C:状态栏Alpha

时间:2015-10-18 07:37:06

标签: objective-c uialertview alpha

我正在创建一个自定义警报视图,我将此视图的背景设置为大部分为alpha黑色,以使背景视图显得略微褪色。除了状态栏(它保持完全相同)之外,这个工作正常。

使用当前的Apple AlertView框架,当显示警报视图时,整个背景会略微淡化。我该如何复制此功能?

修改

没有一个答案能为我解决这个问题。以下是我打开AlertView时所做的事情:

[self.navigationController.view.superview addSubview:self.alertViewController.view];

然后从viewDidLoad()中的自定义警报视图控制器:

self.view.backgroundColor = COLOR_BLACK_ALPHA;

3 个答案:

答案 0 :(得分:0)

您无法更改状态栏的alpha,只能设置其外观。

UIAlertView是一个Apple组件,因此使用私有API来执行您无法做到的事情。

我建议在显示您的视图之前,使用类似的内容拍摄其下方屏幕的快照(来源:Capture iPhone screen with status bar included

UIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

移除状态栏,然后放置图像,模糊图像(可以使用模糊视图完成,或者只是对图像产生影响,然后显示视图。

如果您有任何疑问,请询问。

答案 1 :(得分:0)

您可以在Window中添加自定义叠加层,然后再添加自定义提醒视图:

UIWindow *aMainWindow = [[UIApplication sharedApplication] keyWindow];
self.grayOverlayView = [[MyCustomAlertViewOverlay alloc] initWithFrame:aMainWindow.bounds];
self.grayOverlayView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
[aMainWindow addSubview:self.grayOverlayView];
[aMainWindow addSubview:self.customAlertView];

这就是你的叠加层的样子:

@implementation MyCustomAlertViewOverlay


- (void)drawRect:(CGRect)iRect {
        CGContextRef aContext = UIGraphicsGetCurrentContext();
        CGContextSaveGState(aContext);
        CGColorRef aGradientStartColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0].CGColor;
        CGColorRef aGradientEndColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6].CGColor;
        NSArray *aColors = [NSArray arrayWithObjects:(__bridge id)aGradientStartColor, (__bridge id)aGradientEndColor, nil];
        CGFloat rLocations[2] = {0.0 , 0.5};
        CGColorSpaceRef rColorSpace = CGColorSpaceCreateDeviceRGB();
        CGGradientRef rGradient = CGGradientCreateWithColors(rColorSpace, (CFArrayRef) aColors, rLocations);
        CGColorSpaceRelease(rColorSpace);
        CGPoint aCenter = CGPointMake(iRect.origin.x + iRect.size.width / 2, iRect.origin.y + iRect.size.height / 2);
        CGContextDrawRadialGradient(aContext, rGradient, aCenter, 0, aCenter,  iRect.size.height, kCGGlyphMax);
        CGContextSetRGBFillColor(aContext, 0, 0, 0, 0.0);
        CGGradientRelease(rGradient);
        CGContextFillRect(aContext, iRect);
        CGContextRestoreGState(aContext);
}

答案 2 :(得分:0)

这个怎么样?

UIWindow *customWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
customWindow.windowLevel = UIWindowLevelStatusBar+1;
customWindow.hidden = NO;
customWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7];
[customWindow makeKeyAndVisible];

现在在customWindow内你可以添加你想要的任何东西......