2016-11-19 6 views
0

각 UIBezierPath 섹션에 다른 획 색상을 설정하고 싶습니다. 그러나 명령은 완전히 잘못되었으며이를 수정하는 방법을 알지 못합니다.UIGraphicsGetCurrentContext마다 다른 setStroke 색상

이 내가 원하는 무엇인가 :

enter image description here

을 그리고 이것은 내가 무엇을 얻을 : 그것은 순서가 잘못되었다는 것 같아

enter image description here

. bezierPath에 색상을 "바인딩"하고 컨텍스트에 추가하는 방법이 있습니까? 내 코드는 아래와 같습니다. 감사!

 let size = CGSize(width: 134, height:51) 
    UIGraphicsBeginImageContext(size) 
    let context = UIGraphicsGetCurrentContext() 

    //// Rectangle Drawing 
    let rectanglePath = UIBezierPath(roundedRect: CGRect(x: 0.5, y: 0.5, width: 126, height: 50), cornerRadius: 3) 
    UIColor.lightGray.setStroke() 
    rectanglePath.lineWidth = 1 
    rectanglePath.stroke() 
    let clipPath: CGPath = rectanglePath.cgPath 
    context?.addPath(clipPath) 

    //// Rectangle 2 Drawing 
    let rectangle2Path = UIBezierPath(roundedRect: CGRect(x: 3, y: 3, width: 121, height: 45), cornerRadius: 3) 
    UIColor.green.setFill() 
    rectangle2Path.fill() 
    let clipPathh: CGPath = rectangle2Path.cgPath 
    context?.addPath(clipPathh) 

    let rectangle3Path = UIBezierPath(roundedRect: CGRect(x: 128, y: 18, width: 6, height: 14), byRoundingCorners: [.topRight, .bottomRight], cornerRadii: CGSize(width: 3, height: 3)) 
    UIColor.gray.setFill() 
    rectangle3Path.fill() 
    let clipPathhh: CGPath = rectangle3Path.cgPath 
    context?.addPath(clipPathhh) 

    context?.closePath() 

    // Convert to UIImage 
    let cgimage = context!.makeImage(); 
    let uiimage = UIImage(cgImage: cgimage!) 

    // End the graphics context 
    UIGraphicsEndImageContext() 

    image.image = uiimage; 
+0

나는 IB를 통해 던져진 UIImageView를 사용하여 새로운 프로젝트에 코드를 복사하거나 붙여 넣기를했다. 나는 올바른 결과를 얻고있다. 녹색 채우기 주위의 밝은 회색 테두리. 왜 그것이 나를 위해 일하는지 잘 모르겠다. 자, 정말로 원하는 것이 녹색 테두리가있는 흰색 테두리 바깥의 회색 테두리라면 흰색의 세 번째 경로가 필요할 수 있습니다. – dfd

+0

Mhh, viewDidLoad에 붙여 넣었습니까? – da1lbi3

+0

예. 다시 말하지만, 거칠고 빠른 복사/과거. 베 지어 경로의 경우 일반적으로보기의 drawRect에서 물건을 원합니다. – dfd

답변

1

알아보기 베 지어 경로로 작업 한 이후로 얼마 동안은 문제를 발견했으나 순서대로 진행되었습니다. 코드가 있어야한다 : 당신이 컨텍스트 경로를 추가 한 후 채우기/스트로크에게

let size = CGSize(width: 134, height:51) 
UIGraphicsBeginImageContext(size) 
let context = UIGraphicsGetCurrentContext() 

//// Rectangle Drawing 
let rectanglePath = UIBezierPath(roundedRect: CGRect(x: 0.5, y: 0.5, width: 126, height: 50), cornerRadius: 3) 
UIColor.lightGray.setStroke() 
rectanglePath.lineWidth = 1 
let clipPath: CGPath = rectanglePath.cgPath 
context?.addPath(clipPath) 
rectanglePath.stroke() 

//// Rectangle 2 Drawing 
let rectangle2Path = UIBezierPath(roundedRect: CGRect(x: 3, y: 3, width: 121, height: 45), cornerRadius: 3) 

UIColor.green.setFill() 
let clipPathh: CGPath = rectangle2Path.cgPath 
context?.addPath(clipPathh) 
rectangle2Path.fill() 

let rectangle3Path = UIBezierPath(roundedRect: CGRect(x: 128, y: 18, width: 6, height: 14), byRoundingCorners: [.topRight, .bottomRight], cornerRadii: CGSize(width: 3, height: 3)) 
UIColor.gray.setFill() 
let clipPathhh: CGPath = rectangle3Path.cgPath 
context?.addPath(clipPathhh) 
rectangle3Path.fill() 

// Convert to UIImage 
let cgimage = context!.makeImage(); 
let uiimage = UIImage(cgImage: cgimage!) 

// End the graphics context 
UIGraphicsEndImageContext() 


imageView.image = uiimage; 

참고. 또한 rectPath를 정의하여 이미 전체 경로를 지정하고 있으므로 closePath 호출은 아무런 영향을 미치지 않습니다.