2012-01-24 51 views
6

Tôi thực sự mới đối phó với CGContexts và tôi chỉ đang cố gắng thu hút sự chú ý của mình bằng cách làm theo hướng dẫn vẽ đơn giản & hướng dẫn phác thảo (http://blog.effectiveui.com /? p = 8105)Thay đổi màu nền của CGContext

Tôi đã nhấn một bức tường gạch khi nó đến để thay đổi màu nền của CGContext của tôi mặc dù.

Tôi đang bắt đầu những conext như thế này:

- (BOOL) initContext:(CGSize)size { 
    int bitmapBytesPerRow; 
    bitmapBytesPerRow = (size.width * 4); 
    cacheContext = CGBitmapContextCreate (nil, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast); 
    CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1); 
    return YES; 
} 

và thay đổi màu sắc đột quỵ và độ rộng như thế này:

UIColor *color = [UIColor whiteColor]; 
CGContextSetStrokeColorWithColor(cacheContext, [color CGColor]); 
CGContextSetLineCap(cacheContext, kCGLineCapRound); 
CGContextSetLineWidth(cacheContext, 4); 

nhưng khi tôi cố gắng để thay đổi màu nền từ đen (hoặc trong init hoặc trong các phần thiết lập bản vẽ/nét vẽ) sử dụng CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1); không có hiệu lực.

Có ai có thể chỉ cho tôi đúng hướng của một địa điểm tốt hơn/chính xác để thực hiện cuộc gọi đó hoặc cuộc gọi chính xác để sử dụng không? Cảm ơn vì bạn đã dành thời gian!

+0

có thể trùng lặp: http://stackoverflow.com/questions/2571550/how-i-set-the-background-color-in-uiview-using-cgcontext – Saphrosit

Trả lời

22

Bạn không thể chỉ đặt màu và mong đợi ngữ cảnh sẽ lấp đầy bằng màu mới. Bạn cần phải thực sự vẽ màu đó vào ngữ cảnh. Trong phương thức init, sau khi cài đặt đầy màu sắc, hãy thử sử dụng một cái gì đó giống như

CGContextFillRect(cacheContext, (CGRect){CGPointZero, size}); 

Trên một lưu ý liên quan, bối cảnh không có một màu đen theo mặc định. Chúng có màu trong suốt. Bây giờ, nếu ngữ cảnh của bạn không có kênh alpha, thì điều này sẽ kết thúc là màu đen, nhưng nếu ngữ cảnh của bạn có kênh alpha và bạn thấy màu đen thì đó là vì bạn đang hiển thị kết quả trên đầu (hoặc, luân phiên, bạn đặt hình ảnh trong suốt vào một lớp có cờ opaque được đặt thành true và CoreAnimation sẽ kết thúc vẽ lên trên màu đen).

+0

Điều đó hoạt động hoàn hảo. Cảm ơn rất nhiều vì câu trả lời và lời giải thích rõ ràng! – DaveDee

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