2013-07-07 5 views
0

코어 그래픽을 사용하여 iOS에서 검은 색/흰색 방사형 그래디언트로 그림을 마스킹 할 수 있습니다. 그러나 나는 결과를 얻고있다. 그래디언트가 적용되는 영역에서 사진을 투명하게 만들고 나머지 부분을 표시해야합니다. 이는 그림에서 "! [hole] [1]"을 의미합니다. 하지만 여기서 구멍은 그라디언트 마스크로 만듭니다.코어 그래픽에서 방사형 그래디언트 마스크 반전

누구나 포토샵에서와 같이 방사형 그래디언트 마스크를 반전시킬 수있는 방법이나 힌트를 제안 해 주실 수 있습니까?

+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

관련 문제