2015-04-25 2 views
2

Двойная проверка, если мне нужно вызвать CGContextSaveGState и CGContextRestoreGState даже при создании нового imageContext.Нужно ли мне звонить CGContextSaveGState и CGContextRestoreGState?

Из того, что я прочитал в «Руководстве по программированию кварца», мне не нужно будет в приведенном ниже примере, потому что я создаю совершенно новый контекст изображения.

Я искал github для UIGraphicsBeginImageContextWithOptions, а некоторые люди сохраняют и восстанавливают контекст, а другие люди этого не делают.

// Uses a circularMask on an image 
class func circularImage(image: UIImage, diameter: Int) -> UIImage { 
    assert(diameter > 0, "Diameter > 0 Failed \(__FUNCTION__)") 

    let frame = CGRect(x: 0.0, y: 0.0, width: Double(diameter), height: Double(diameter)) 
    var newImage: UIImage? 

    UIGraphicsBeginImageContextWithOptions(frame.size, false, UIScreen.mainScreen().scale) 

    var context: CGContextRef = UIGraphicsGetCurrentContext() 
    CGContextSaveGState(context) 

    let imagePath: UIBezierPath = UIBezierPath(ovalInRect: frame) 
    imagePath.addClip() 

    image.drawInRect(frame) 

    newImage = UIGraphicsGetImageFromCurrentImageContext() 

    CGContextRestoreGState(context); 

    UIGraphicsEndImageContext() 

    return newImage! 
} 

ответ

1

Нет, ты прав вам не нужно, чтобы сохранить состояние контекста для того, что вы там делаете (и вы могли бы безопасно закомментировать те, у вас есть). Но если вы хотите «отменить» отсечение, которое вы сделали (например), то это способ сделать это. Будьте осторожны, всегда держите эти (save/restore) gstate в совпадающих парах, это стек, поэтому вы должны отслеживать все, что вы там наложили.

+0

Спасибо за ответ. – Tobias

Смежные вопросы