编辑代码

5.1.2
//
// ViewController.swift
// GraphDemo
//
// Created by Zhifeng Chen on 2020/8/4.
// Copyright @ 2020 Zhifeng Chen. All rights reserved.
//

import UIKit

class CoreGraphUIView : UIView{

     override func touchesBegan(_touches:Set<UITouch>, with event: UIEvent?) {
         self.backgroundColor= UIColor.red
         print("Began:\(touches)")
     }

      override func touchesEnded(_touches:Set<UITouch>,with event: UIEvent?) {
          self.backgroundColor = UIColor.lightGray
          print("Ended:\(touches)")
      }

      override func touchesMoved(_touches: Set<UITouch>,with event: UIEvent?) {
          self.backgroundColor = UIColor.blue
          print("Moved:\(touches)")
      }
}

class ViewController : UIViewControlle {

    override func viewDidLoad() {
        super.viewDidLoad()
       // Do any additional aetup after loading the view.
       let height = self.view.frame.size.height
       let width = self.view.frame.size.width
       let graphFrame = CGRect(x:0, y:0, width: width,height: height)
       let grapView = CoreGraphUIView(frame: graphFrame)
       graphView.backgroundColor = UIColor.white
       self.view.addSubview(graphView)
    }
}
let touch:UITouch = touches.first! as UITouch
print(touch.location(in: view).x)
print(touch.location(in: view).y)

5.2
class Shape{
    //名称
    var name  :  String?
    //边数
    var sides  : Int?
    //左上角的位置坐标
    var origin   : CGPoint?
    //线条颜色
    var lineColor  :  UIColor= UIColor.red
    //填充颜色
    var fillColor : UIColor=UIColor.green
    //线条宽度
    var lineWidth :   CGPLoat=2
    //构造器函数init
    init(name : String, sides:Int,origin: CGPoint){
        self.naem=name
        self.sides=sides
        self.origin=origin
    }
    //自定义方法sayHello
    func sayHello(){
        print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.x),\(origin!.y)")
    }
}

class Shape {
    //名称
    var name : String?
    //边数
    var sides : Int?
    //左上角的位置坐标
    var origin : CGPoint?
    //线条颜色
    var lineColor : UIColor = UIColor.red
    //填充颜色
    var fillColor : UIColor = UIColor.green
    //线条宽度
    var lineWidth : CGPLoat = 2
    //构造器函数init
    init(name : String, sides : Int, origin : CGPoint) {
        self.naem = name
        self.sides = sides
        self.origin = origin
    }
    //自定义方法sayHello
    func sayHello() {
        print ("Shape is \(name!),sides \(sides!), and originCord is (\
origin!.x),\(origin!.y) ")
    }
}
5.2.2
//
// ViewController.swift
// ShapeDemo
//
// Created by Zhifeng Chen on 2020/8/4.
// Copyright @ 2020 Zhifeng Chen. All rights reserved.
//

import UIKit

class Shape {
   // 名称
    var name : String?
   // 边数
   var sides : Int?
   // 左上角的位置坐标
    var origin : CGPoint?
    // 线条颜色
    var lineColor : UIColor = UIColor.red
    // 填充颜色
    var fillColor : UIColor = UIColor.green
    // 线条宽度
    var lineWidth : CGPLoat = 2
    // 构造器函数init
    init(name : String, sides : Int, origin : CGPoint) {
        self.naem = name
        self.sides = sides
        self.origin = origin
    }
    // 自定义方法sayHello
    func sayHello() {
        print("Shape is \(name!),sides \(sides!), and originCord is(\
origin!.x),\(origin!.y) ")
    }
}

class  ViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        // 此处调用Shape类,建立一个对象(实例)myShaple
        let myShape = Shape(name:"BaseShape", sides : 0, origin: CGPoint(x: 0,y: 0))
        myShape.sayHello()
    }
}
5.2.3
//
// ViewController. swift
// DrawMusic
//
// Created by Zhifeng Chen on 2020/8/4.
// Copyright @ 2020 Zhifeng Chen. All rights reserved.
//

import UIKit

class Shape {
    // 名称
    var name : String?
    // 边数
    var sides : Int?
    // 左上角的位置坐标
    var origin : CGPoint?
    // 线条颜色
    var lineColor : UIColor = UIColor. red
    // 填充颜色
    var fillColor : UIColor = UIColor. green
    // 线条宽度
    var lineWidth : CGFloat = 2
    // 构造器函数init
    init(name : String, sides : Int, origin : CGPoint) {
        self. name = name
        self. sides = sides
        self. origin = origin
    }
    // 自定义方法sayHello
    func sayHello() {
        print("Shape:\(name!), sides \(sides!), origin  (\(origin!. x),\
(origin!. y)) ")
   }
}


class CzfView : UIView {
    // 成员变量(属性) shape,其类型为Shape
    var shape : Shape?
    // 重载UIView的draw方法
    override func draw(_ rect : CGRect) {
    // 判断shape变量是否为空值nil
    guard let s = shape else {
       return
}
   // 不为空,则调用shape 这个实例的方法
    s. sayHello()
  }
}

class ViewController: UIViewController {

   override func viewDidLoad() {
       super. viewDidLoad()
       // Do any additional setup after loading the view, typically from anib.
       // 此处调用Shape类,建立一个对象(实例)myShape
       let myShape = Shape(name:"BaseShape", sides:0, origin: CGPoint(x: 0 ,y :0 ) )
       // 此处建立了一个CzfView的实例myView
       let width = self. view. frame.size.width
       let height = self. view. frame.size.height
       let myView = CzfView(frame: CGRect(x: 0, y: 0, width: width, height: height))
       // 赋值给myView中的成员变量(属性) shape
       myView. shape = myShape
       // 显示myView
       self. view. addSubview(myView)
   }    
}

//自定义方法drawBezierPath用于画图
func drawBezierPath() {
   // 调用贝塞尔曲线函数UIBezierPath()
   let path = UIBezierPath()
   // 圆弧的中心点center,其坐标为(100,100)
   let center : CGPoint = CGPoint(x: 100, y: 100)
   // 圆弧的半径长度radius,其值为80
   let radius : CGFloat = 80
   // 生成一个圆
   path. addArc(withCenter: center, radius: radius, startAngle: 0, endAngle: CGFloat. pi*2, clockwise:true)
   // 线条宽度为5
   path.lineWidth = 5
   // 线条颜色为 red 红色
   UIColor. red. setStroke()
   // 画出这个圆
   path.stroke()
}

s.drawBezierPath()

myView.backgroundColor = UIColor.clear   //清除背景色

5.3
1
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!)")
   } 
}
2
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?.steStroke()
        // 画出线条
        path.stroke()
    }
}
3
class Rectangle : Shape {
    // 左上用采用基类 Shape 中的属性origin
    // 宽度和高度,一般可以采用 CGsize? 
    var size : CGsize?
    // 构造器
    init(name: String, origin: CGPoint , siae : CGSize) {
        super.init(name: name, origin: origin) 
        self.sise = size
    }
    convenience init(origin: CGPoint , sise : CGSize) {
        self.init(name: "Rectangle", origin: origin, sise: slce)
    }
    // 重载drawBenierPath方法
    override func drawBesierPath(){
          // 向控制台榆出信息
          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 cornerCGFloat?
    // 构造器
    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))

4
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
b       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: originl!,  size:size!))
        // 设置实例path的线条宽度
        path.linewidth = linexidth!
        // 设置实例path的线条颜色
        lineColor?.setStroke()
        // 画出线条
        path.stroke()
    }
}

5
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)
         }
         elselet 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的mCve方法移动
    path.move(to: origin!)
    for each in points! {
        // 调用实例path的addiuine方法画线
        path.addLine(to: each)
    }
    path.close()
    // 设置实例path的线条宽度
    path.linewidth = linewidth!
    // 设置实例path的线条颜色
    lineColor?.setStroke()
    // 画出线条
    path.stroke()
    path.611()
  }
}
5.3.2
class Fivestar : Shape {
    // 五角星和正五边形较为类似
    // 中心坐标
    var center : CGPoint?
    // 半径
    var radius : CGFloat?
    // 旋转的角度
    var angel : CGFloat?
    // 构造器
    init(name: string, origin: CGPoint, center : CGPoint, radius : CGFloat,angel : CGFloat ) {
        super.init (name: name, origin: origin)
        self.center = center
        self.radius = radius
        self.angel = angel
    }
    convenience init(center : CGPoint, radius: CFloat, angel: CGFloat = 0) {
        let x = center.x - radius
        let y = center.y - radius
        self.init (name: "FiveStar", origin: CGPoint (x:x, y:y) , center: center,radius: radius, angel: angel)
    }
    // 自定义方法 drawBezierPath 用于画五角星
    override func drawBezierPath () {
        //调用贝塞尔曲线西数 UIBezierPath()
        let path = UIBezierPath()
        // 五角星旋转顶点
        let i = 360 /angel!
        let xzAngle = CGFloat.pi*2/i
        let xzX = (center?.x)!- sin(xzAngle)*radius!
        let xzY = (center?.y)! - cos(xzAngle)*radius!
        let pl = CGPoint (x: xzX,y: xzY)
        path.move(to: p1)
        let angle = CGFloat.pi*4/5
        for i in 1...5 {
            let x = (center?.x)! - sin(CGFloat (i)*angle+xzAngle)*radius!
            let y = (center?.y)!- cos(CGFloat (i)*angle+xzAngle)*radius!
            path.addLine (to: CGPoint (x: x, y: y) )
        }
        path.close ()
        // 线条宽度
          path.lineWidth = lineWidth!
        // 线条颜色为red 红色
        linecolor?.setstroke()
        // 画出这个圆
        path. stroke ()
    }
}

//构造器
init (name: String, origin: CGPoint, center: CGPoint, radius : CGFloat, angel
CGFloat, soundFile: String = "SO.m4a") {
    super. init (name: name, origin: origin, soundFile: soundFile)
    self.center = center
    self .radius = radius
    self.angel = angel
}
5.4.4
//
// ViewController.swift
// GeonetryBand
//
// Creared by zhifeng Chen on 2020/6/4.
// Copyright @ 2020 年 Zhifeng Chen. All rights reserved.
//


import uIkit
import Foundation 
import AVFoundation

class Shape {
    //名称
    var name : String?
    //声音播放器
    var soundPlayer : AVAudioPlayer?
    //声音文件名称
    var soundFile :String?
    //UIBezierPath
    var path : UIBezierPath?
    //selected?
    var selectedFlag : Bool = false
    //左上角的位置坐标
    var origin :CGPoint?
    var lineColor : UIColor? = UIColor.red
    var fillcolor : UIColor? = UIColor.green
    var lineWidth : CGFloat? = 5
    init(name :string,origin :CGPoint,soundFile :String - “DO.m4a“ ) {
        self.name = name
        self.origin = origin
        self.soundFile = soundFile
    }
    convenience init(origin :CGPoint)  {
        self.init(name: “Shape Bassclass“, origin: origin)
    }
    func drawBezierPath() {
        print(“Draw \(name!)“)
}
    func playAudio(){
        print("Play sound:\(soundFile!)")
        let path = Bundle.mainpath(forResource: soundfile,ofType:nil) let url=URL(fileURWithPath:path!)
        soundPlayer =try? AVAudioPlayer(contentsof: url) 
        soundPlayer?.play()
}
    func isSelected(point :CGPoint) -> Bool{
        if (path?.contains(point))! {
          selectedFlag = true
          return true
         }
        else {
          selectedFlag = false
          return false
       }
    }
}
class Line :Shape {
    var start : CGPoint?
    var end : CGPoint?
    init(name: String,origin: CGPoint,start:CGPoint,end:CGPoint,
soundFile :String-“FA.m4a“){
        super.init(name: name,origin: origin,soundfile:soundFile) 
        self.startmstart 
        self.end=end
}
    convenience init(start :CGPoint,end:CGPoint)  {
        self.init(name: “Line“, origin: start, start: start, end: end)
    }
    override func drawBezierPath(){
        print(“Draw\(name!)“)
        path = UIBezierPath()
        path?.move(to: start!)
        path?.addLine(to: end!)
        path?.lineWidth = linewidth!
        path?.lineCapStyle = .round
        lineColor?.setStroke()
        path?.stroke()
    }
}
class Rectangle : Shape{
    var size : CGSize?
    var corner : CGFloat?
    init(name:String,origin: CGPoint, size : CGSire, Corner : 0GFloat,soundFile :
String = "LA.mda") {
        super.init(name:Name,rigingin,soundFile:soundFile) 
        self.sizewsize
        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!)"){
        path = UIBezierPath(roundedRect:CGRect(origin: originl, size
size!),cornerRadius: corner!)
   if selectedFlag {
       let dashes:[CGFloat] = [1,3]
       path?.setLineDash(dashes,count:dashes.count, phase:0)
}
      path?.lineWidth = lineWidth!
      lineColor?.setstroke()
      path?.stroke()
    }
}
class Circle : Shape {
    var center : CGPoint?
    var raduis :CGFloat?
    var size : CGSize?

init(name:String,origin:CGPoint,center:CGPoint, raduis :CGFloat,size :
CGSize,soundFile:String=“MI.m4a“){
    super.init(name: name,origin: origin,soundFile:soundfile) 
    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“,origini CGPoint(xiXry:y), center: center,
raduis: raduis, Bize: CGSize(width; raduis, height; raduia))
}
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(xix,y:y), center:
center, raduis: 0, size: size)
}
override func drawBezierPath(){
    print("Draw \(name!)")
    path=UIBezierPath(ovalIn: CGRect(origin: origin!, size: size!)) if selectedFlag {
        let dashes:[CGFloat]=[1,3]
        path?.setLineDash(dashes,count:dashes.count, phase:0)
        }
        path?.lineWidth = lineWidth!
        lineColor?.setStroke()
        path?.stroke()
        }
}
class Polygons :Shape {
    var points : Array<cgpoint>?
    init(name:String,origin:CGPoint,oints:Array<CGPoint>soundFile:String
= "RE.m4a") {
    super.init(name: name, origin: origin,soundfile: soundFile) 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)
    }
}
 override fune drawBezierPath(){
     print("Draw \(name!)") 
     if(name == "Error") {
         return
     }
     path = UIBezierPath()
     path?.move(to: origin!) 
     for each in points! {
         path?.addLine(to: each
         }
         path?.close()
         path?.lineWidth = lineWidth! 
         lineColor?.setStroke()
         path?.stroke() 
         path?.fill()
 }
}

class FiveStar :Shape {
    var center : CGPoint?
    var radius : CGFloat?
    var angel : CGFloat?
    init(name: String,origin: CGPoint,center:CGPoint,radius :CGFloat,angel :
CGFloat,soundFile :String="so.m4a") {
super.init(name: name, origin: origin,soundFile: soundFile) 
self.center= center 
self.radius = radius 
self.angel = angel
}
convenience init(center: CGPoint, radiun i carlont,angel : CGrloat
= 0) {
    let x = center.x - radius
    let y = center.y - radius
    selfinit(name:"FiveStar",origintCGPoint(uik,yiy), center: contei
radius: radius, angel: angel)
}
override func drawBezierPath(){
    print("Draw\(name!)")
//调用贝塞尔曲线函数UTBezierPath() 
path = UIBezierPath()
let i= 360/angel!
let xzAngle= CGFloat.pi*2/i
let xzX = (center?.x)! - sin(xzAngle)*radius! 
let xzY = (center?.y)! - cos(xzAngle)*radius! 
let p1 = CGPoint(x: xzX, y; xzY) 
path?.move(to: pl)
let angle = CGFloat.pi*4/5 
for i in 1...5 {
    let x = (center?.x)! - sin(CGFloat(i)*angle+xzAngle)*radius! 
    let y = (center?.y)! - cos(CGFloat(i)*angle+xzAngle)*radius! 
    path?.addLine(to: CGPoint(x: x,y:y))
}
path?.close()
if selectedFlag{
    let dashes:[CGFloat] = [1,3]
    path?.setLineDash(dashes,count: dashes.count, phase:0)
}
path?.lineWidth = lineWidth!
//线条颜色为 red 红色
lineColor?.setStroke()
path?.stroke()
}
}
class CzfView : UIView {
    //成员变量(属性)shapes,其类型为Array<Shape> 
    private var shapes Array<Shape>=[]
    //重载UIView的draw 方法
    override func draw( rect: CGRect){
        //调用shapes 这个数组中的每个实例的方法 
        for s in shapes {
            s.drawBezierPath()
        }
    }

//增加实例到数组shapes中 
func add(shape : Shape) {
    shapes.append(shape)
}
//触摸事件 
override func touchesBegan(_ touches : Set<UITouch>, with event:
UIEvent?)  {
    //获得UITouch集合
    let touch:UITouch = touches.first! as UITouch
    //获得触摸所在位置的坐标
    let point = touch.location(in: self)
    //调用 shapes 这个数组中的每个实例的方法 
    for s in shapes {
        //如果被选中
        if s.isSelected(point: point) {
            // 声音播放
            s.playAudio()
            //更新屏幕显示
            self.setNeedsDisplay()
        }
    }
}
}
class ViewController : UIViewController {

    override func viewDidLoad(){
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a
nib.
//此处调用FiveStar类,建立一个对象(实例)star
//五角星的中心坐标为(180,180)
let starCenter = CGPoint(x: 180, y:180)
//五角星的半径设定了 90,旋转角度为15度
let star = FiveStar(center: starCenter,radius: 50, angel: 45 
star.lineColor = UIColor.blue
//此处调用Circle 类,建立一个对象oval
let ovalCenter = CGPoint(x:100, y;300)
let ovalSize = CGSize(width: 100,height:60)
let ovalmCircle(center: ovalCenter, size: ovalSize)
//此处调用 Rectangle类,建立一个对象rect 
let rectOrigin = CGPoint(x:60,y:50)
letrectSize = GSize(width: 100,height:50) 
Let rect = Rectangle(origin:rectorigin,size:rectSize,corner:6) 
rect.lineColor = UIColorgray

//此处建立了一个Czfview的实例myview
let myView = CzfView(frame:CGRect(x:0,y:0,width: self.view.
frame.size width, height: self.viewframe.size.height))
//清除背景色
myView.backgroundColor = UIColor.clear
//赋值给myView中的成员变量(属性)shape 
myView.add(shape: star) 
myView.add(shape:oval) 
myView.add(shape:rect)
//显示myView
self.view.addSubview(myView)
    }
}