iOS 里怎样最简单地实现一个全屏,边缘半透明灰的弹出层
1个回答
展开全部
直观上来看,通过一个UIView配合图片,或者半透明的颜色都可以,这样的确可以简单的实现这个过程。
但是比较推荐使用通过Quartz 2D去实现这个功能,涉及到图片素材的加载,还是有性能影响的。IO过程耗费比较高。
贴一个实现:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect currentBounds = self.bounds;
CGGradientRef backgroundGradient;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 0.0, 0.0, 0.0, 0.0, // Start color
0.0, 0.0, 0.0, 0.6
}; // End color
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
backgroundGradient = CGGradientCreateWithColorComponents (rgbColorspace, components, locations, num_locations);
CGPoint centerPoint = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
CGContextDrawRadialGradient (context, backgroundGradient, centerPoint, 0.0, centerPoint, currentBounds.size.width, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(backgroundGradient);
}
在UIView子类的drawRect中实现即可。
但是比较推荐使用通过Quartz 2D去实现这个功能,涉及到图片素材的加载,还是有性能影响的。IO过程耗费比较高。
贴一个实现:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect currentBounds = self.bounds;
CGGradientRef backgroundGradient;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 0.0, 0.0, 0.0, 0.0, // Start color
0.0, 0.0, 0.0, 0.6
}; // End color
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
backgroundGradient = CGGradientCreateWithColorComponents (rgbColorspace, components, locations, num_locations);
CGPoint centerPoint = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
CGContextDrawRadialGradient (context, backgroundGradient, centerPoint, 0.0, centerPoint, currentBounds.size.width, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(backgroundGradient);
}
在UIView子类的drawRect中实现即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询