2011-11-19 67 views
15

Tôi muốn vẽ hình chữ nhật đầy trong chế độ xem của khung nhìn của tôi. Tôi đã viết mã bên dưới trong viewDidLoad. Nhưng không có thay đổi. Có gì sai?Làm thế nào để vẽ hình chữ nhật?

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

xin lưu ý, cho câu hỏi ** cực kỳ cũ này **, tôi đã đưa ra câu trả lời hiện đại, 2018 – Fattie

Trả lời

41

Bạn không thể làm điều đó trong chế độ xemController. Bạn cần phải mở rộng Chế độ xem và thêm mã trong "drawRect:"

điều này sẽ thay đổi logic vẽ của chế độ xem của bạn.

-(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 cho câu trả lời đúng - mặc dù tôi sẽ không bỏ qua tham số CGRect của drawRect .... – Till

+0

Phải, Tôi đoán một giải pháp tốt hơn là đầu tiên xác minh rằng khu vực cần được vẽ lại là một phần của hình chữ nhật, và chỉ sau đó làm điều đó. –

+0

Ý của bạn là gì? – charly

2

Bạn không thể hiển thị trực tiếp trong chế độ xemDidLoad; chính các quan điểm đó sẽ phải chạy điều này trong phương thức drawRect của chúng.

Cách dễ nhất để "vẽ" hình chữ nhật là đặt UIView với màu nền & đường viền trong chế độ xem của bạn. (Bạn có thể thiết lập biên giới qua các phương pháp CALayer của của cái nhìn tức myView.layer.borderColor = [[UIColor redColor] CGColor];.)

1

Chỉ cần cho rõ ràng:

Nếu Bạn cần phải vẽ một hình chữ nhật trong đó có điền giống nhau và màu đường viền, Sau đó bạn có thể thay thế:

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

với: giải pháp

[[UIColor redColor] set]; 
0

hiện đại 2018 ..

override func draw(_ rect: CGRect) { 

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

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

là vậy.

Các vấn đề liên quan