2013-07-07 70 views
0

我可以在iOS中使用核心圖形蒙黑色/白色放射狀漸變的圖片。但是我得到的結果恰恰與我想要的相反。我希望圖片在應用了漸變的區域是透明的,並應顯示圖片的其餘部分。這意味着圖片中的「![洞] [1]」。但是這裏的洞將由漸變蒙版創建。在覈心圖形中反轉放射狀漸變蒙版

任何人都可以請建議我一些方式或任何提示顛倒徑向漸變蒙版,就像我們在Photoshop中做的一樣。

+0

你應該有顏色分量在漸變的代碼的數組。這可能聽起來很愚蠢,但是轉換顏色會有幫助嗎?或者你想在任何情況下反轉顏色? – architectpianist

+0

@architectpianist不,我嘗試切換顏色,但它不好。 – maven25

回答

0

而不是使用蒙版,我認爲最好的方法是插入圖層。這就是我爲我的IOS應用程序所做的。

- (void) addSublayer { 
    CGPoint center = CGPointMake(self.addButton.frame.origin.x, self.addButton.frame.origin.y); 
    UIBezierPath* clip = [UIBezierPath bezierPathWithArcCenter:center 
                radius:CGRectGetMaxX(self.addUnavailabilitySubView.frame) - self.addButton.center.x 
               startAngle:-1.57 
                endAngle:1.57 
               clockwise:YES]; 
    [clip addLineToPoint:center]; 
    [clip closePath]; 

    CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 
    [shapeLayer setMasksToBounds:YES]; 
    shapeLayer.frame = self.view.layer.bounds; 
    shapeLayer.path = clip.CGPath; 

    //This gradient layer can be a customised one 
    CALayer *gradientLayer = [CALayer layer]; 
    gradientLayer.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width); 

    [self.view.layer insertSublayer:gradientLayer atIndex:0]; 
} 

我也可以在這裏分享我的徑向漸變層:)

-(void)drawInContext:(CGContextRef)ctx { 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    size_t num_locations = 2; 
    CGFloat locations[2] = { 0.0, 1.0 }; // End color 

    CGFloat components[8] = {0.f, 0.f, 0.f, 0.3f, 0.f, 0.f, 0.f, 0.8f}; 

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, num_locations); 

    CGFloat myStartRadius, myEndRadius; 

    CGPoint radialCenter = CGPointMake(100, 100) 
    myStartRadius = 20; 
    myEndRadius = 300; 
    CGContextDrawRadialGradient (ctx, gradient, radialCenter, 
          myStartRadius, radialCenter, myEndRadius, 
          kCGGradientDrawsAfterEndLocation); 
} 
+0

我知道它遲到的評論,但你提供的解決方案好得多。謝謝。 – maven25