2013-03-19 21 views
22

Có hai phương pháp drawRect:CGContextSaveGState vs UIGraphicsPushContext

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    // do drawing here 
    CGContextRestoreGState(context); 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    UIGraphicsPushContext(context); 
    // do drawing here 
    UIGraphicsPopContext(); 
} 

UIGraphicsPushContext/UIGraphicsPopContext là từ UIKit khi CGContextSaveGState/CGContextRestoreGState là từ CoreGraphics.

Câu hỏi: Sự khác biệt giữa các phương pháp đó là gì? Cái nào tốt hơn để sử dụng? Có một số ví dụ chứng minh một phương pháp tốt hơn so với các phương pháp khác và ngược lại không?

Trả lời

34

UIGraphicsPushContext(context) đẩy bối cảnh vào một chồng CGContextRefs (làm bối cảnh bối cảnh bản vẽ hiện hành), trong khi CGContextSaveGState(context) đẩy trạng thái đồ họa hiện tại vào stack đồ họa tiểu bang duy trì bởi ngữ cảnh. Bạn nên sử dụng UIGraphicsPushContext nếu bạn cần tạo một CGContextRef ngữ cảnh bản vẽ hiện tại mới và bạn nên sử dụng CGContextSaveGState khi bạn đang làm việc với một bối cảnh đồ họa và chỉ muốn lưu, ví dụ: trạng thái biến đổi hiện tại, màu tô hoặc màu đột quỵ, v.v.

0

UIGraphicsPushContext (ctx) hữu ích khi bạn muốn vẽ bằng UIkit và ngữ cảnh hiện tại không phải là ngữ cảnh mà bạn muốn vẽ. Bạn sử dụng hàm này để làm cho ngữ cảnh mà bạn muốn vẽ trở thành hiện tại bối cảnh. CGContextSaveGState (ctx) lưu ngữ cảnh (được gọi bằng ctx), sau đó bạn có thể khôi phục ngữ cảnh sử dụng CGContextRestoreGState()

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