0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Swift] UIBezierPathで簡単なアイコンサンプルを作成する

Last updated at Posted at 2020-08-08

はじめに

アプリ開発をしていて簡易的にアイコンを設定したいと思ったときに、
単純なものならUIBezierPathを使用してサックっと作成してしまうのも良いかもと思いサンプルを作成しました。

対象バージョン

  • Xcode ver.11.6
  • iOS ver 13.5.1

完成サンプル

image.png

UIBezierPathView.swift
import UIKit

class UIBezierPathView: UIView {
    private var type: Int = 0
    
    init(frame: CGRect, type: Int) {
        super.init(frame: frame)
        self.type = type
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        backgroundColor = UIColor(red: 88/255, green: 149/255, blue: 223/255, alpha: 1)
        super.layoutSubviews()
        layer.cornerRadius = frame.width / 2
        layer.masksToBounds = true
    }
    
    override func draw(_ rect: CGRect) {
        switch type {
        case 1:
            // プラス
            let verticalPath = UIBezierPath();
            verticalPath.move(to: CGPoint(x: rect.midX, y: 15));
            verticalPath.addLine(to: CGPoint(x: rect.midX, y: rect.maxY - 15));
            verticalPath.close()
            UIColor.white.setStroke()
            verticalPath.lineWidth = 4
            verticalPath.stroke();
            
            let horizontalPath = UIBezierPath();
            horizontalPath.move(to: CGPoint(x: 15, y: rect.midY));
            horizontalPath.addLine(to: CGPoint(x: rect.maxX - 15, y: rect.midY));
            horizontalPath.close()
            UIColor.white.setStroke()
            horizontalPath.lineWidth = 4
            horizontalPath.stroke();
        case 2:
            // バツ
            let rightPath = UIBezierPath();
            rightPath.move(to: CGPoint(x: 18, y: 18));
            rightPath.addLine(to: CGPoint(x: rect.maxX - 18, y: rect.maxY - 18));
            rightPath.close()
            UIColor.white.setStroke()
            rightPath.lineWidth = 4
            rightPath.stroke();

            let leftPath = UIBezierPath();
            leftPath.move(to: CGPoint(x: rect.maxX - 18, y: 18));
            leftPath.addLine(to: CGPoint(x: 18, y: rect.maxY - 18));
            leftPath.close()
            UIColor.white.setStroke()
            leftPath.lineWidth = 4
            leftPath.stroke();
        case 3:
            // 四角
            let squarePath = UIBezierPath(rect: CGRect(x: 15, y: 15, width: 18, height: 18))
            UIColor.white.setStroke()
            squarePath.lineWidth = 4.0
            squarePath.stroke()
        case 4:
            // 三角
            let trianglePath = UIBezierPath();
            trianglePath.move(to: CGPoint(x: rect.maxX - 15, y: rect.midY));
            trianglePath.addLine(to: CGPoint(x: 20, y: 15));
            trianglePath.addLine(to: CGPoint(x: 20, y: rect.maxY - 15));
            trianglePath.close()
            UIColor.white.setStroke()
            trianglePath.lineWidth = 4.0
            trianglePath.stroke();
        case 5:
            // 三本線
            let lineOnePath = UIBezierPath();
            lineOnePath.move(to: CGPoint(x: 15, y: 18));
            lineOnePath.addLine(to: CGPoint(x: rect.maxX - 15, y: 18));
            lineOnePath.close()
            UIColor.white.setStroke()
            lineOnePath.lineWidth = 4
            lineOnePath.stroke();

            let lineTwoPath = UIBezierPath();
            lineTwoPath.move(to: CGPoint(x: 15, y: 25));
            lineTwoPath.addLine(to: CGPoint(x: rect.maxX - 15, y: 25));
            lineTwoPath.close()
            UIColor.white.setStroke()
            lineTwoPath.lineWidth = 4
            lineTwoPath.stroke();
            
            let lineThreePath = UIBezierPath();
            lineThreePath.move(to: CGPoint(x: 15, y: rect.maxY - 18));
            lineThreePath.addLine(to: CGPoint(x: rect.maxX - 15, y: rect.maxY - 18));
            lineThreePath.close()
            UIColor.white.setStroke()
            lineThreePath.lineWidth = 4
            lineThreePath.stroke();
        default:
            // 円
            let circlePath = UIBezierPath(arcCenter: CGPoint(x: rect.midX, y: rect.midY), radius: 10, startAngle: 0, endAngle: CGFloat(Double.pi) * 2, clockwise: true)
            UIColor.white.setStroke()
            circlePath.lineWidth = 4.0
            circlePath.stroke()
        }
    }
}
UIBezierPathViewController.swift
import UIKit

class UIBezierPathViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
        
        let circleView = UIBezierPathView(frame: CGRect(x: 0, y: 50, width: 50, height: 50), type: 0)
        circleView.center.x = view.center.x
        view.addSubview(circleView)
        
        let plusView = UIBezierPathView(frame: CGRect(x: 0, y: 150, width: 50, height: 50), type: 1)
        plusView.center.x = view.center.x
        view.addSubview(plusView)
        
        let closeView = UIBezierPathView(frame: CGRect(x: 0, y: 250, width: 50, height: 50), type: 2)
        closeView.center.x = view.center.x
        view.addSubview(closeView)

        let squareView = UIBezierPathView(frame: CGRect(x: 0, y: 350, width: 50, height: 50), type: 3)
        squareView.center.x = view.center.x
        view.addSubview(squareView)
        
        let triangleView = UIBezierPathView(frame: CGRect(x: 0, y: 450, width: 50, height: 50), type: 4)
        triangleView.center.x = view.center.x
        view.addSubview(triangleView)
        
        let threeLineView = UIBezierPathView(frame: CGRect(x: 0, y: 550, width: 50, height: 50), type: 5)
        threeLineView.center.x = view.center.x
        view.addSubview(threeLineView)
    }
}

まとめ

シンプルなものなら簡単に描画できるので、忘れたときに参考にしてもらえればと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?