본문 바로가기

iOS/스위프트로 아이폰 앱 만들기

[16장] Core graphics

728x90

Core graphics

쿼츠 라이브러리를 이용하여 가벼운 2D 렌더링 작업을 수행할 수 있는 라이브러리입니다.

경로로 그림 그리기 뿐만 아니라 안티앨리어싱 렌더링, 그라디언트, 이미지, PDF 등 의 작업에도 사용됩니다.

 

그림 그리기

UIGraphicsBeginImageContext, UIGraphicsEndImageContext로 bitmap-based graphic context를 추가하거나 제거합니다. 

context를 이용해서, 선, 사각형, 원, 호를 그리거나 도형의 색깔을 채울 수 있습니다.

    @IBAction func btnDrawFill(_ sender: UIButton) {
        UIGraphicsBeginImageContext(imgView.frame.size)
        let context = UIGraphicsGetCurrentContext()!
        
        // draw rectangle
        context.setLineWidth(1.0)
        context.setStrokeColor(UIColor.red.cgColor)
        context.setFillColor(UIColor.red.cgColor)
        
        let rectangle = CGRect(x: 70, y: 50, width: 200, height: 100)
        context.addRect(rectangle)
        context.fill(rectangle)
        context.strokePath()
        
        // draw circle
        context.setLineWidth(1.0)
        context.setStrokeColor(UIColor.blue.cgColor)
        context.setFillColor(UIColor.blue.cgColor)
        
        let circle = CGRect(x: 70, y: 200, width: 200, height: 100)
        context.addRect(circle)
        context.fill(circle)
        context.strokePath()
        
        // draw traiangle
        context.setLineWidth(1.0)
        context.setStrokeColor(UIColor.green.cgColor)
        context.setFillColor(UIColor.green.cgColor)
        
        context.move(to: CGPoint(x: 170, y: 350))
        context.addLine(to: CGPoint(x: 270, y: 450))
        context.addLine(to: CGPoint(x: 70, y: 450))
        context.addLine(to: CGPoint(x: 170, y: 350))
        context.fillPath()
        context.strokePath()
        
        imgView.image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    }

 

 

 

그래픽이라는 용어 때문에 어려울 것이라 생각했지만 코드에는 Delegate도 없고, 아주 직관적인 형태여서 어렵지 않습니다.

 

Reference

https://developer.apple.com/documentation/coregraphics

'iOS > 스위프트로 아이폰 앱 만들기' 카테고리의 다른 글

[18장] Swipe Gesture  (0) 2021.10.20
[17장] Tab & Touch  (0) 2021.10.20
[15장] Camera & Photo Library  (0) 2021.10.19
[14장] Video  (0) 2021.10.19
[13장] Audio  (0) 2021.10.17