2011-11-19 3 views
15

채워진 사각형을 내 viewController 뷰에 그려야합니다. 아래 코드를 viewDidLoad에 썼습니다. 그러나 변화가 없습니다. 무엇이 잘못 되었나요?직사각형을 그리는 방법?

CGRect rectangle = CGRectMake(0, 100, 320, 100); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextFillRect(context, rectangle); 
+0

여기 ** 매우 오래된 질문 **에 대해, 정답은 2018 – Fattie

답변

41

viewController에서 수행 할 수 없습니다. 보기를 확장하고 "drawRect :"아래에 코드를 추가해야합니다.

이렇게하면보기의 그리기 논리가 변경됩니다.

-(void) drawRect:(CGRect)rect{  
[super drawRect:rect]; 
    CGRect rectangle = CGRectMake(0, 100, 320, 100); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 
    CGContextFillRect(context, rectangle); 
} 
+2

+1입니다. drawRect의 CGRect 매개 변수는 무시하지 않지만 ... – Till

+0

오른쪽, 더 좋은 해결책은 처음에 재 묘화 될 필요가있는 영역이 사각형의 일부인지 확인한 다음에 그 영역 만 수행하는 것입니다. –

+0

보기를 확장한다는 것은 무엇을 의미합니까? – charly

2

viewDidLoad에서 직접 렌더링 할 수 없습니다. drawRect 메소드에서 이것을 실행해야하는 것은 뷰 자체입니다.

사각형을 "그리는"가장 쉬운 방법은 배경색이 & 인 UIView를보기에 배치하는 것입니다. (당신은보기의의 CALayer의 방법을 통해 국경을 설정할 수 있습니다 즉 myView.layer.borderColor = [[UIColor redColor] CGColor];를.)

1

그냥 명확성을 위해 : 동일한 채우기 및 테두리 색상이있는 사각형을 그리해야하는 경우

, 그때 당신은 대체 할 수

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 

:

[[UIColor redColor] set]; 
0

현대 2018 솔루션 ...

override func draw(_ rect: CGRect) { 

    let r = CGRect(x: 5, y: 5, width: 10, height: 10) 

    UIColor.yellow.set() 
    UIRectFill(r) 
} 

그게 전부입니다.

관련 문제