我正在创建一个自定义警报视图,我将此视图的背景设置为大部分为alpha黑色,以使背景视图显得略微褪色。除了状态栏(它保持完全相同)之外,这个工作正常。
使用当前的Apple AlertView框架,当显示警报视图时,整个背景会略微淡化。我该如何复制此功能?
修改
没有一个答案能为我解决这个问题。以下是我打开AlertView时所做的事情:
[self.navigationController.view.superview addSubview:self.alertViewController.view];
然后从viewDidLoad()中的自定义警报视图控制器:
self.view.backgroundColor = COLOR_BLACK_ALPHA;
答案 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
内你可以添加你想要的任何东西......