๋์์ธ ๊ฐ์ด๋๋ฅผ ์ฝ๋ค๋ณด๋ฉด, Asset์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ ๊ทธ๋ฅ View๋ฅผ ๋ง๋ค๊ณ Imageํ ํด์ ์ฌ์ฉํ๋ฉด ์ข๊ฒ ๋๋ฐ.. ์ ์ฐพ์์๋ค!!
Answer
extension UIView {
public func asImage() -> UIImage {
UIGraphicsImageRenderer(bounds: self.bounds).image {
self.layer.render(in: $0.cgContext)
}
}
}
UIGraphicsImageRenderer
๊ทธ๋ฐ๋ฐ ์ด ์น๊ตฌ๊ฐ ๋ญํ๋ ๋ ์์ธ์ง ๋ฌธ๋ ๊ถ๊ธํด์ก๋ค.
Core Graphics ์ง์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ทธ๋ํฝ ๋ ๋๋ฌ
UIKit ๊ธฐ๋ฐ ์ฑ์ ์ํด Core Graphics์ ๋ํ ๊ฒ์ดํธ์จ์ด ์ญํ ์ ํ๋ค. ์ฆ, renderer ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด ๋ด์ rendering context๋ฅผ ์์ฑํ๋ฉด, Core Graphics์์ ํด๋น ์์ ์ ์ฒ๋ฆฌํ์ฌ ๋ค์ UIKit์ ํด๋นํ๋ ๋ ์์ผ๋ก ๋ฐํํด์ค๋ค. ๊ณต์ ๋ฌธ์์ ์๋ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด, ์ด๋ค ์น๊ตฌ์ธ์ง ๋๋ฒ์ ์ ์ ์๋ค.
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 200, height: 200)) // Format์ด ํ์ํ๋ค๋ฉด ํด๋น initilizer๋ฅผ ์ฌ์ฉ
// UIImage๋ฅผ ๋ฆฌํดํ๋ ๋ฉ์๋. jpg, png๋ ์๋ค.
let image = renderer.image { (context) in
UIColor.darkGray.setStroke()
context.stroke(renderer.format.bounds)
UIColor(colorLiteralRed: 158/255, green: 215/255, blue: 245/255, alpha: 1).setFill()
context.fill(CGRect(x: 1, y: 1, width: 140, height: 140))
UIColor(colorLiteralRed: 145/255, green: 211/255, blue: 205/255, alpha: 1).setFill()
context.fill(CGRect(x: 60, y: 60, width: 140, height: 140), blendMode: .multiply)
UIColor(colorLiteralRed: 203/255, green: 222/255, blue: 116/255, alpha: 0.6).setFill()
context.cgContext.fillEllipse(in: CGRect(x: 60, y: 60, width: 140, height: 140)) // CGContext ์ฌ์ฉ
}
- ํฌ๊ธฐ๊ฐ 200x200์ธ UIGraphicsImageRenderer ๊ฐ์ฒด renderer๋ฅผ ๋ง๋ ๋ค.
- renderer๋ฅผ ๋ง๋ค์๋ค๊ณ ๋ ๋๋ง์ด ์คํ๋์ง๋ ์๋๋ค. renderer์
image()
๋ฉ์๋์์ ์คํ๋๋ค.
- renderer๋ฅผ ๋ง๋ค์๋ค๊ณ ๋ ๋๋ง์ด ์คํ๋์ง๋ ์๋๋ค. renderer์
renderer.image
์ closure๋ฅผ ์์ฑํ๋ค.func image(actions: (UIGraphicsImageRendererContext) -> Void) -> UIImage
- ํด๋ก์ ๋ง์ ์ ๋ ฅ ์ธ์๋ก ๋ฐ๊ณ , ๊ฒฐ๊ณผ๋ก UIImage๋ฅผ ์ค๋ค.
- closure ๋ด๋ถ์๋
UIGraphicsImageRenderContext
๊ฐ ์๋๋ฐ, ์ด๋ ์์UIGraphicsRendeerContext
๋ฅผ ์์ํ๊ณ ์์ด, ๊ทธ๋ฆฌ๊ธฐ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋cgContext
๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ ์ด ๋ ์์ ์ฌ์ฉํด์ ๊ทธ๋ ค์ฃผ๋ฉด ๋๋ค. UIGraphicsImageRenderContext
์๋ ๊ธฐ๋ณธ์ ์ธ ๊ทธ๋ฆฌ๊ธฐ ๋ฉ์๋๋ ์์ง๋ง, ๊ณ ๊ธ ๋์์ ํ๊ณ ์ถ๋ค๋ฉดUIGraphicsRendeerContext.CGContext
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ด ์์ ์ ๋ง์น๋ฉด ์๋์ ๊ฐ์ ๋ํ์ด ๊ทธ๋ ค์ง๋ค.
์์ฝ
UIGraphicsImageRendererContext
๋ Core Graphic ๋ ๋๋ง ๊ธฐ๋ฅ์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋cgContext
๋ฅผ ๊ฐ์ง๊ณ ์๋ค.- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ UIKit์์ Core Graphic์ ์ ๊ทผํ์ฌ ์ด๋ฏธ์ง ๋ ๋๋ง์ ์ํํ ์ ์๋ค.
- ์ด๋ฐ ์๋ฏธ์์ ์ ํ์ ์ ์๋ ์ด๋์ ๋ ์ดํด๊ฐ ๋๋ ๋ถ๋ถ์ด๋ค.
๋!