我有一個透明的光孔視圖,一個視圖疊加超級視圖,並且在封面視圖中有一個孔漸變圓視圖,超級視圖仍然可見。 我不知道實行梯度光孔來看,任何人都可以幫我如何在視圖中切出一個具有徑向漸變的孔
編輯 ============
我嘗試添加封面查看全屏,封面視圖背景顏色清晰,並將自定義CALayer作爲子圖層添加到封面視圖圖層。
的蓋視圖實現:
@implementation CoverView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)setGradientHoleFrame:(CGRect)gradientHoleFrame {
if (!CGRectEqualToRect(_gradientHoleFrame, gradientHoleFrame)) {
_gradientHoleFrame = gradientHoleFrame;
[self loadRadialGradientLayer];
}
}
- (void)loadRadialGradientLayer {
RadialGradientLayer *layer = [[RadialGradientLayer alloc] init];
layer.frame = self.bounds;
layer.raidalGradientFrame = self.gradientHoleFrame;
[layer setNeedsDisplay];
[self.layer addSublayer:layer];
}
@end
定製徑向漸變層:
CGFloat const GRADIENT_WIDTH = 10.0f;
@implementation RadialGradientLayer
- (void)setRaidalGradientFrame:(CGRect)raidalGradientFrame {
if (!CGRectEqualToRect(_raidalGradientFrame, raidalGradientFrame)) {
_raidalGradientFrame = raidalGradientFrame;
[self setNeedsDisplay];
}
}
- (void)drawInContext:(CGContextRef)context {
CGContextSaveGState(context);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat colours[8] = { 0.0f, 0.0f, 0.0f, 0.0f, // Clear region colour.
0.0f, 0.0f, 0.0f, 0.8 }; // Blur region colour.
CGFloat locations[2] = { 0.0f, 1.0f };
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colours, locations, 2);
CGPoint center = CGPointMake(self.raidalGradientFrame.origin.x + self.raidalGradientFrame.size.width/2,
self.raidalGradientFrame.origin.y + self.raidalGradientFrame.size.height/2);
CGFloat radius = MIN(self.raidalGradientFrame.size.width/2, self.raidalGradientFrame.size.height/2) + GRADIENT_WIDTH;
CGContextDrawRadialGradient(context, gradient, center, 0.0, center, radius, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
}
@end
和我的用戶是:
CoverView *view = [[CoverView alloc] initWithFrame:[UIScreen mainScreen].bounds];
// for get hole frame
CGRect rect = [self.coinPointView.superview convertRect:self.coinPointView.frame toView:view];
view.gradientHoleFrame = rect;
[self.tabBarController.view addSubview:view];
最後,我得到了下面的結果。
感謝@gbk和@馬特
你可以發佈一些代碼,我是新的iOS開發。 – jacinzhang
我不會爲你寫代碼,沒有。你的問題是,「我不知道要實現梯度光孔視圖」。我給你瞭解如何實現它的想法。堆棧溢出已經有數百次(包括我)解釋過類似漏洞和漸變以及掩碼的問題。 – matt