swift 3線引き-SpriteKit線引き

2163 ワード

一、Core Graphics紹介
1.Core Graphicsとは
(1)Core Graphics FrameworkはCベースのAPIフレームワークであり、Quartzを描画エンジンとして使用し、すべての描画操作に使用できる.低レベル、軽量レベル、高忠実度の2 Dレンダリングを提供する.(2)Quartz 2 DはCore Graphics Frameworkの一部であり、強力な2 D画像描画エンジンである.(3)我々が使用しているUIライブラリのUIコンポーネントは全てCoreGraphicsによって描画されている.したがってCoreGraphicsを使用することで、UIKIよりも下位の機能を実現することができる.(4)我々がUIKIフレームワークを導入すると、自動的にCoreGraphicsフレームワークを導入するとともに、UIKI内部においてもいくつかの一般的な描画APIをカプセル化して、我々の使用を便利にする.(例えば、CGMutablePathはCore Graphicsの下位APIであり、UIBezierPathはCGMutablePathのパッケージである.)
2.図面の一般手順
(1)描画コンテキストを取得する(2)作成してパスを設定する(3)コンテキストにパスを追加する(4)タッチカラー、幅、塗りつぶしカラーなどのコンテキスト状態を設定する(5)描画パス
二、直線を描く
import UIKit
 
class ViewController: UIViewController {
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        let frame = CGRect(x: 30, y: 30, width: 250, height: 100)
        let cgView = CGView(frame: frame)
        self.view.addSubview(cgView)
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
 
class CGView:UIView {
     
    override init(frame: CGRect) {
        super.init(frame: frame)
        //        ,       
        self.backgroundColor = UIColor.clear
    }
     
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
     
    override func draw(_ rect: CGRect) {
        super.draw(rect)
         
        //       
        guard let context = UIGraphicsGetCurrentContext() else {
            return
        }
         
        //      ,        3
        let drawingRect = self.bounds.insetBy(dx: 3, dy: 3)
         
        //       
        let path = CGMutablePath()
        path.move(to: CGPoint(x:drawingRect.minX, y:drawingRect.minY))
        path.addLine(to:CGPoint(x:drawingRect.maxX, y:drawingRect.minY))
        path.addLine(to:CGPoint(x:drawingRect.maxX, y:drawingRect.maxY))
         
        //          
        context.addPath(path)
         
        //      
        context.setStrokeColor(UIColor.orange.cgColor)
        //      
        context.setLineWidth(6)
         
        //    
        context.strokePath()
    }
}