2011-11-19 149 views
15

我想在viewContoller的視圖中繪製填充的矩形。 我在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) 
} 

就是這樣。