2016-06-09 2 views
0

저는 다음 코드를 사용하여 Trinagle 모양을 그렸습니다. 나는이 모양에 그림자를 적용하고 싶습니다. Bezierpath를 사용하여 그려 왔습니다.은 shibow에 uibiezierpath를 보여줍니다.

CGContextRef context = UIGraphicsGetCurrentContext(); 
    //creating a new nsshadow 
    NSShadow* shadow = [[NSShadow alloc] init]; 
    [shadow setShadowColor: UIColor.blackColor]; 
    [shadow setShadowOffset: CGSizeMake(3.1, 3.1)]; 
    [shadow setShadowBlurRadius: 5];  

    //view to add a bezier path 
    UIView *triangleView = [[UIView alloc] initWithFrame:CGRectMake(67.0f,33.4f, 40.0f ,20.0f)]; 

    // code for drawing a trinagular shape 
    UIBezierPath* trianglePath = [UIBezierPath bezierPath]; 
    [trianglePath moveToPoint:CGPointMake(0, 0)]; 

    [trianglePath addQuadCurveToPoint:CGPointMake(7.0f, 3.0f) controlPoint:CGPointMake(4.0f, 0.0f)]; 

    [trianglePath addLineToPoint:CGPointMake(17.0f,15.0f)]; 

    [trianglePath addQuadCurveToPoint:CGPointMake(23.0f,15.0f) controlPoint:CGPointMake(20.0f, 20.0f)]; 

    [trianglePath addLineToPoint:CGPointMake(33.0f, 3.0f)]; 

    [trianglePath addQuadCurveToPoint:CGPointMake(40.0, 0.0f) controlPoint:CGPointMake(36.5f, 0.0f)]; 
    [trianglePath addLineToPoint:CGPointMake(0.0f, 0.0f)]; 


    CGContextAddPath(context, trianglePath.CGPath);  
    CGContextSaveGState(context); 
    CGContextSetShadowWithColor(context, shadow.shadowOffset, shadow.shadowBlurRadius, [shadow.shadowColor CGColor]); 
    [UIColor.redColor setFill]; 
    [trianglePath fill]; 
    CGContextRestoreGState(context); 

    [UIColor.blackColor setStroke]; 
    trianglePath.lineWidth = 1; 
    [trianglePath stroke]; 
    CGContextFillPath(context); 

    //CAShapeLayer to set the bezier path 
    CAShapeLayer *triangleMaskLayer = [CAShapeLayer layer]; 
    [triangleMaskLayer setPath:trianglePath.CGPath]; 

    triangleMaskLayer.lineWidth = 0.1f; 
    triangleMaskLayer.fillColor = [[UIColor whiteColor] CGColor]; 

    [triangleView.layer addSublayer:triangleMaskLayer]; 

이 uibezier 경로에 그림자를 설정하고 싶습니까? 나는 어떤 방법을 사용해 보았지만 어떤 것이 잘못되었는지 알아 내지 못했습니까? 아래와 같이 CAShapeLayer에 그림자 속성을 설정하여

답변

0

시도 :

CAShapeLayer *triangleMaskLayer = [CAShapeLayer layer]; 

    triangleMaskLayer.shadowColor=[UIColor blackColor].CGColor; 
    triangleMaskLayer.shadowOffset=CGSizeMake(3.1, 3.1); 
    triangleMaskLayer.shadowRadius=5.0; 

    [triangleView.layer addSublayer:triangleMaskLayer]; 
0

SWIFT 당신은 첫째 그림자 레이어를 만든 다음이 shadowlayer의 하위 레이어로 shapelayer을 추가 할 수 있습니다 3 . 다른 것들은 간단합니다.

let triangleView = UIView(frame: CGRect(x: 67, y: 33, width: 40, height: 20)) 

    let trianglePath = UIBezierPath() 
    trianglePath.move(to: CGPoint(x:0, y:0)) 
    trianglePath.addQuadCurve(to: CGPoint(x:7, y:3), controlPoint: CGPoint(x:4, y:0)) 
    trianglePath.addLine(to: CGPoint(x:17, y:15)) 
    trianglePath.addQuadCurve(to: CGPoint(x:23, y:15), controlPoint: CGPoint(x:20, y:20)) 
    trianglePath.addLine(to: CGPoint(x:33, y:3)) 
    trianglePath.addQuadCurve(to: CGPoint(x:40, y:0), controlPoint: CGPoint(x:36, y:0)) 
    trianglePath.addLine(to: CGPoint(x:0, y:0)) 
    trianglePath.close() 


    //CAShapeLayer to set the bezier path 
    let triangleMaskLayer = CAShapeLayer() 
    triangleMaskLayer.path = trianglePath.cgPath 
    triangleMaskLayer.lineWidth = 1 
    triangleMaskLayer.strokeColor = UIColor.black.cgColor 
    triangleMaskLayer.fillColor = UIColor.red.cgColor 


    let shadowlayer = CALayer() 
    shadowlayer.frame = CGRect(x: 100, y: 100, width: 200, height: 200) 
    shadowlayer.shadowColor = UIColor.black.cgColor 
    shadowlayer.shadowRadius = 5.0 
    shadowlayer.shadowOffset = CGSize(width: 3.1, height: 3.1) 
    shadowlayer.shadowOpacity = 1.0 

    shadowlayer.addSublayer(triangleMaskLayer) 
    triangleView.layer.addSublayer(shadowlayer) 
    self.view .addSubview(triangleView) 
관련 문제