2010-04-03 38 views
7

Đây là mã tôi sử dụng để vẽ:Tại sao có lỗi ngữ cảnh không hợp lệ?

- (void) drawSomething 
{ 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1); 
    CGContextSetLineWidth(context, 6.0); 

    CGContextMoveToPoint(context, 100.0f, 100.0f); 
    CGContextAddLineToPoint(context, 200.0f, 200.0f); 
    CGContextStrokePath(context); 

    NSLog(@"draw"); 

} 

Nhưng tôi đã nhận lỗi như thế này:

[Session started at 2010-04-03 17:51:07 +0800.] 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetRGBStrokeColor: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetLineWidth: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextMoveToPoint: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextAddLineToPoint: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextDrawPath: invalid context 

Tại sao nó nhắc tôi để nói rằng bối cảnh được invalided?

+0

Bạn đang gọi drawSomething từ đâu? Vậy ngữ cảnh hiện tại là gì? –

+0

nó được gọi từ phương pháp init của tôi. ngữ cảnh hiện tại không phải là chế độ xem hiện tại? – Tattat

Trả lời

12

Giống như the documentation nói:

Bối cảnh đồ họa hiện nay là con số không theo mặc định. Trước khi gọi drawRect của nó: phương thức, xem các đối tượng đẩy một ngữ cảnh hợp lệ vào ngăn xếp, làm cho nó hiện hành.

Vì vậy, bạn cần phải đặt mã này trong phương pháp drawRect

+0

vẫn không nhận được rằng – Tattat

+4

Hệ điều hành iPhone được xây dựng để bối cảnh đồ họa (có thể truy cập với chúng tôi qua UIGraphicsGetCurrentContext()) chỉ được tạo khi cần. Đó là điều cần thiết khi bạn muốn vẽ một cái gì đó, vì vậy trong drawRect: methode mà bạn sẽ ghi đè lên trong lớp của bạn. Thậm chí nếu bạn có thể gọi trực tiếp drawRect :, tư liệu tài liệu SDK của iPhone mà bạn không muốn. Vì vậy, thay vì chỉ đổi tên phương thức của bạn drawSomething: để drawRect: và gọi nó, sẽ hoạt động, tôi sẽ khuyên bạn nên làm điều đó nhưng gọi setNeedsDisplay như @Brad Larson đã nói với bạn;) –

+0

thz guys, u rất hữu ích. – Tattat

8

Từ my answer để this similar question:

Nếu đây là được vẽ vào màn hình, bạn sẽ cần phải xác định vị trí mã vẽ của bạn trong vòng phương thức -drawRect: của UIView (hoặc –drawInContext: của một CALayer). Để cập nhật nội dung của nó, bạn cần gọi số -setNeedsDisplay trên UIView hoặc CALayer. Việc cố vẽ vào bất kỳ thời điểm nào khác sẽ gây ra lỗi "ngữ cảnh không hợp lệ" mà bạn thấy.

Xem thêm this question.

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