UIBezierPath 的基本使用

贝塞尔曲线可以实现很多功能的,只要我们会计算能想到,就能画出来,例如那种带有弧度的 View 。淘宝首页就有那种弧度的样式。简书上写的人很多,我就不凑热闹了 ,就把基本的写一下。 官方使用姿势戳这里 接下来我们看下他的基本使用吧:

import UIKit

class ViewController: UIViewController {

	override func viewDidLoad() {
		super.viewDidLoad()
		
		// 画椭圆,在给定矩形区域中画椭圆,正方形就是圆 长方形就是椭圆
		let path = UIBezierPath(ovalIn: CGRect(x: 10, y: 30, width: 200, height: 100))
		path.lineWidth = 1
		path.stroke()
		
		let pathlayer = CAShapeLayer()
		pathlayer.strokeColor = UIColor.red.cgColor
		pathlayer.path = path.cgPath
		pathlayer.fillColor = UIColor.white.cgColor
		view.layer.addSublayer(pathlayer)
	
		
		/*
		   roundedRect: 画的区域
		   byRoundingCorners: 枚举,四个角实行圆角的哪个位置
		   cornerRadii: 圆角大小
		*/
		
		let path1 = UIBezierPath(roundedRect: CGRect(x: 250, y: 30, width: 100, height: 100), byRoundingCorners: [.topLeft,.bottomLeft], cornerRadii: CGSize(width: 50, height: 50))
		let pathlayer1 = CAShapeLayer()
		pathlayer1.strokeColor = UIColor.red.cgColor
		pathlayer1.path = path1.cgPath
		pathlayer1.fillColor = UIColor.white.cgColor
		view.layer.addSublayer(pathlayer1)

		
		// 也是画圆角形状,和上边的区别是四个角全部为圆角
		let path2 = UIBezierPath(roundedRect: CGRect(x: 130, y: 150, width: 100, height: 100), cornerRadius: 20)
		self.createlayer(path: path2)
		
		
		
		// 划三角形, 五角星  都能画出来了吧,根据点来连线就行了
		let path3 = UIBezierPath()
		path3.move(to: CGPoint(x: 60, y: 150))
		path3.addLine(to: CGPoint(x: 10, y: 235))
		path3.addLine(to: CGPoint(x: 110, y: 235))
	    path3.close()
		self.createlayer(path: path3)
		
		/*
		   画狐线,顺时针画弧线,从 startAngle 顺时针画到 endAngle
		   arcCenter: 弧度的中心点
		   radius: 半径
		   startAngle: 开始的角度
		   endAngle: 结束的角度
		*/
		let path4 = UIBezierPath(arcCenter:  CGPoint(x: 280, y: 200), radius: 50, startAngle: CGFloat.pi / 180 * 225, endAngle: CGFloat.pi / 180 * 315, clockwise: true)
	
		self.createlayer(path: path4)
		
		
		/*
			画S 弧线,严格的来说不能说是 S 弧线,因为有两个控制点。控制点在一侧,就是一种曲线,在两侧就是 S 线。
			move: 添加一个起点
			to: 终点
			controlPoint1: 第一个控制点
			controlPoint2: 第二个控制点
		    控制点是拉伸起点和终点画出的这条直线的弯曲方向,弯曲的高度是控制点到直线距离的一半
		*/
		
		let path5 = UIBezierPath()
		path5.move(to: CGPoint(x: 20, y: 300))
		path5.addCurve(to: CGPoint(x: 220, y: 300), controlPoint1: CGPoint(x: 70, y: 280), controlPoint2: CGPoint(x: 170, y: 350))
		
		self.createlayer(path: path5)
		
		// 画弧线 和上边原理一样  但是只有一个控制点
		let path6 = UIBezierPath()
		path6.move(to: CGPoint(x: 20, y: 400))
		path6.addQuadCurve(to: CGPoint(x: 200, y: 400), controlPoint: CGPoint(x: 100, y: 450))
		self.createlayer(path: path6)

	}
	
	
	func createlayer(path: UIBezierPath) {
		let pathlayer1 = CAShapeLayer()
		// 画的线的颜色
		pathlayer1.strokeColor = UIColor.green.cgColor
		// 划线的宽度
		pathlayer1.path = path.cgPath
		// 填充色
		pathlayer1.fillColor = UIColor.white.cgColor
		view.layer.addSublayer(pathlayer1)
	}
	
}


复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值