编辑代码

class Shape {
//名称
var name : String?
//左上角的位置坐标
var origin : CGPoint?
//线条颜色
var lineColor : UIColor? = UIColor.red
//填充颜色
var fillColor : UIColor? = UIColor.green
//线条宽度
var lineWidth : CGFloat? = 5
//构造器函数init
init(name : String, origin : CGPoint) {
self.name = name
self.origin = origin
}
//便利构造器函数init
convenience init(origin : CGPoint) {
self.init(name: "Shape Bassclass", origin: origin)
}
//自定义方法 drawBezierPath 用于画图 
func drawBezierPath() {
//向控制台输出信息
print("Draw \(name!)")
}
}


class Line : Shape {
//线段的起点
var start :CGPoint?
//线段的终点
var end : CGPoint?

//构造器
init(name: String, origin: CGPoint, start : CGPoint, end : CGPoint) {
super.init(name : name, origin : origin) 
self.start = start 
self.end = end
}
convenience init(start : CGPoint, end : CGPoint) {
self.init(name: "Line", origin: start, start: start, end: end)
}

//重载drawBezierPath方法
override func drawBezierPath() {
//向控制台输出信息
print("Draw \(name!)")
//建立一个UIBezierPath 实例对象 
let path = UIBezierPath()
//调用实例path 的 move 方法移动
path.move(to: start!)
//调用实例path的addLine方法画线 
path.addLine(to: end!)
//设置实例path的线条宽度
path.lineWidth = lineWidth!
//设置实例path的线条终端样式.round或者.square 
path.lineCapStyle = .round
//设置实例path的线条颜色 
lineColor?.setStroke()
//画出线条
path.stroke()
}
}


class Rectangle :Shape {
//左上角采用基类Shape中的属性origin
//宽度和高度,一般可以采用 CGSize 
var size: CGSize?
//构造器
init(name: Stringr, origin: CGPoint, size: CGSize) {
super.init(name: name,origin:origin) 
self.size = size
}
convenience init(origin: CGPoint , size: CGSize) {
self.init(name: "Rectangle", origin: origin, size: size)
}
//重载drawBezierPath方法
override func drawBezierPath() {
//向控制台输出信息
print("Draw \(name!)")
//建立一个UIBezierPath实例对象
let path = UIBezierPath(rect:CGRect(origin: origin!, size: size!))
//设置实例path的线条宽度
path.lineWidth = lineWidth!
//设置实例path的线条颜色 
lineColor?.setStroke()
//画出线条
path.stroke()
}
}


class Rectangle :Shape {
//左上角采用基类 Shape 中的属性 origin
//宽度和高度,一般可以采用 CGSize 
var size : CGSize?
//圆角的大小
var corner : CGFloat?
//构造器
init(name: String, origin: CGPoint , size : CGSize , corner : CGFloat) {
super.init(name: name, origin: origin) 
self.size = size
self.corner = corner
}
convenience init(origin: CGPoint, size : CGSize, corner : CGFloat = 0) {
self.init(name: "Rectangle", origin: origin, size: size, corner : corner)
}
//重载drawbezierPath方法
override func drawbezierPath() {
//向控制台输出信息
print("Draw\(name!)")
//建立一个UIBezierPath实例对象
let path = UIBezierPath(roundedRect: CGRect(origin: origin!, size: size!), cornerRadius: corner!)

//设置实例path的线条宽度
path.lineWidth = linewidth!
//设置实例path的线条颜色 
lineColor?.setStroke()
//画出线条
path.stroke()
}
}


let myRect = Rectangle(origin: start, size: CGSize(width: 150, height:	100),corner:8.0)

let myRect = Rectangle(origin: start, size: CGSize(width: 150, height:	100))


class Circle : Shape {
//圆心坐标
var center : CGPoint?
//半径长度
var raduis : CGFloat?
//椭圆的宽度和高度,一般可以采用 CGSize 
var size : CGSize?

//构造器
init(name: String,origin: CGPoint, center : CGPoint, raduis : CGFLoAT, size :CGSize) {
super.init(name: name, origin: origin) 
self.center = center 
self.raduis = raduis 
self.size = size
}
convenience init(center : CGPoint, raduis : CGFloat) {
let x = center.x - raduis 
let y = center.y - raduis
self.init(name: "Circle", origin: CGPoint(x:x,y:y), center: center, raduis: raduis, size : CGSize(width: raduis, height: raduis))
}
convenience init(center : CGPoint, size : CGSize) {
let x = center.x - size.width/2 
let y = center.y - size.height/2
self.init(name:"Oval/Ellipse",origin: CGPoint(x: x, y: y), center: center, raduis: 0, size: size)
}
//重载drawBezierPath方法
override func drawBezierPath() {
//向控制台输出信息
print("Draw\(name!)")
//建立一个UIBezierPath实例对象
let path = UIBezierPath(ovalIn: CGRect(origin: origin!, size: size!))
//设置实例path的线条宽度
path.lineWidth = lineWidth!
//设置实例path的线条颜色 
lineColor?.setStroke()
//画出线条
path.stroke()
}
}


class Polygons : Shape{
//多边形主要是通过多个顶点相互连接来绘图
//顶点数组
var points : Array<CGPoint>?
init(name: String, origin : CGPoint, points : Array<CGPoint> ) {
super.init(name: name, origin: origin) 
self.points = points
}
convenience init(points :Array<CGPoint> ) {
if points.count == 3 {
self.init(name: "Triangel", origin: points.first!, points: points)
}
else if points.count >= 3 {
self.init(name: "Polygons", origin: points.first!, points: points)
}
else {
let origin = CGPoint(x: 0, y: 0)
self.init(name: "Error", origin: origin, points: points)
}
}
//重载drawBezierPath方法
override func drawBezierPath() {
//向控制台输出信息
print("Draw \(name!)")
//如果不能识别,直接返回 
if(name == "Error") {
return
}
//建立一个UIBezierPath实例对象 
let path = UIBezierPath()
//调用实例path的move方法移动 
path.move(to: origin!) 
for each in points! {
//调用实例path的addLine方法画线 
path.addline(to: each)
}
path.close()
//设置实例path的线条宽度
path.linewidth = lineWidth!
//设置实例path的线条颜色
lineColor?.setStroke()
//画出线条
path.stroke() 
path.fill()
}
}