编辑代码

var myString = "Hello world!     -  swift.jsrun.net"
print(myString)
ViewController.swift
GraphDemo

Created by Zhifeng Chen on 2020/8/4.
Copyright © 2020 Zhifeng Chen. All rights reserved.


import UIKit

class CoreGrapUIView : UIView {

    override func touchesBegen(_touches:Set<UITouch>,with event: UIEvent?) {
        self.backgroundColor = UIColor.ved
        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: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup 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 graphView = CoreGrapUIView(frame: graphFrame)
        graphView.backgroundColor = UIColor.width
        self.view.addSubview(graphView)
    }
}





var myString = "Hello world!     -  swift.jsrun.net"
print(myString)
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(name : String, sides : Int, origin : CGPoint) {
        self.name = name
        self.sides = sides
        self.origin = origin
    }
    func sayHello(){
        print("Shape is \(name!),sides \(sides!), and originCord is(\(origin!.x),\(origin!.y)) ")
    }
}






ViewControllre.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 : CGFloat = 2
    init(name : String, sides : Int, origin : CGPoint) {
        self.name = name
        self.sides = sides
        self.origin = origin
    }
    func sayHello() {
        print("Shape is \(name!),sides \(sides!), and originCord is(\(origin!.x),\(origin!.y)) ")
    }
}

class ViewControllre: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        Do any additional setup after loading the view.
        let myShape = Shape(name:"BaseShape", sides: 0, origin: CGPoint: CGPoint(x: 0, y: 0))
        myShape.sayHello()
    }
}






ViewControllre.swift
DrawMusic

Created by Zhifemg 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(name : String, sides : Int, origin : CGPoint) {
        self.name = name
        self.sides = sides
        self.origin = origin
    }
    func sayHello(){
        print("Shape:\(name!),sides \(sides!), origin (\(origin!.x),\(origin!.y)) ")
    }
}

class CzfView : UIView {
    var shape : Shape?
    override func draw(_rect: CGRect) {
        guard let s = shape else {
            retuyn
        }
        s.sayHello()
    }
}

class ViewControllre: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        Do any additional setup after loading the view, typically from a nib.
        let myShape = Sape(name:"BaseShape", sides: 0, origin: CGPoint(x: 0, y: 0))
        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 = myShape
        self.view.addSubview(myView)
    }
}






func drawBezierPath(){
    let path = UIBezierPath()
    let center : CGPoint = CGPoint(x: 100,y: 100)
    let radius : CGFloat = 80
    path.addArc(withCenter: center, radius: radius, startAngle: 0,endAngle: CGFloat.pi*2, clockwise: true)
    path.lineWidth = 5
    UIColor.red.setStroke()
    path.stroke()
}





var myString = "Hello world!     -  swift.jsrun.net"
print(myString)
class Shape {
    var name  : String?
    var origin : CGPoint?
    var lineColor : UIColor? = UIColor.red
    var fillColor :; UIColor? = UIColor.green
    var lineWidth : CGFloat? = 5
    init(name : String, oringin : CGPoint) {
        self.name = name
        self.origin = origin
    }
    convenience init(origin : CGPoint) {
        self.init(name: "Shape Bassclass", origin: origin)
    }
    convenience init(origin : CGPoint) {
        self.init(name: "Shape Bassclass", origin: origin)
    }
    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: strat, strat:strat, end: end)
    }

    override func drawBezierPath(){
        print("Draw \(name!)")
        let 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?
    init(name: String, 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)
    }
    override func drawBezierPath(){
        print("Draw \(name!)")
        let path = UIBezierPath(rect: CGRect(origin: origin!, size: size!))
        path.lineWidth = lineWidth!
        lineColor?.setStroke()
        path.stroke()
    }
}






class Rectangle : Shape {
    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)
    }
    override func drawBezierPath(){
        print("Draw \(name!)")
        let path = UIBezierPath(roundedRect: CGRect(origin: origin!, size: size!), cornerRadius: corner!)
        path.lineWidth = lineWidth!
        lineColor?.setStroke()
        path.stroke()
    }
}






class Circle : Shape {
    var center : CGPoint?
    var radius : CGFloat?
    var size : CGSize?
    init(name: String, origin: CGPoint, center : CGPoint, radius ; CGFloat, size : CGSize) {
        super.init(name: name, origin: origin)
        self.center = center
        self.raduis = radius
        self.size = size
    }
    convenience init(center : CGPoint,raduis : CGFloat) {
        let x = center.x - radius
        let y = center.y - radius
        self.init(name: "Circle", origin: CGPoint(x:x,y:y), center: center, radius: radius, size: CGSize(width: radius,height: radius))
    }
    convenience init(center : CGPoint, size : CGSize) {
        let x = center.x - size.width/2
        let y = center.y - size.heigth/2
        self.init(name: "Oval/Ellipse", origin: CGPoint(x:x,y:y), center: center, radius: 0,size: size)
    }
    override func drawBezierPath(){
        print("Draw\(name!)")
        let path = UIBezierPath(ovalIn: CGRect(origin: origin!, size: size!))
        path.lineWidth = lineWidth!
        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)
        }
        eles 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 func drawBezierPath(){
        print("Draw \(name!)")
        if(name == "Error") {
            return
        }
        let 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 ) {
        super.init(name: name, origin: origin)
        self.center = center
        self.radius = radius
        self.angel = angel
    }
    convenience init(center : CGPoint, radius : CGFloat,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)
    }
    override func drawBezierPath(){
        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 p1 = CGPoint(x:xzX, y: xzY)
            path.move(to:p1)
            let angel = CGFloat.pi*4/5
            for i in 1...5 {
                let x = (center?.x)! - sin(CGFloat(i)*angel+xzAngle)*radius!
                let y = (center?.y)! - cos(CGFloat(i)*angel+xzAngle)*radius!
                path.addLine(to: CGPoint(x: x, y: y))
            }
            path.close()
            path.lineWidth = lineWidth!
            lineColor?.setStroke()
            path.stroke()
    }
    }





    var myString = "Hello world!     -  swift.jsrun.net"
print(myString)
ViewController.swift
GeometryBand

Created by Zhifeng Chen on 2020/8/4.
Copyright2020 年 zhifeng Chen. All rights reserved.


import UIKit
import Foundation
import AVFoundation

class Shape{
    var name  :  String?
    var soundPlayer : AVAudioPlayer?
    var soundFile : String?
    var path : UIBezierPath?
    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.naem = 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.start = start 
    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 : OGFloat,soundFile :
String = "LA,mda") {
    super.init(name: name, origin: origin,soundFile:soundFile) 
    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)
    }
 override func drawBezierPath() {
     print("Draw \(name!)")
     path = UIBezierPath(roundedRect: CGRect(origin: origin!, 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", 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)
}
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, points : 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 func 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, radius : CGPoat,angel : CGFloat = 0) {
        let x = center.x - radius 
        let y = center.y - radius
        self.init(name:"FiveStar", origin: CGPoint(x:x,y:y), center: conter,radius: radius, angel: angel)
    }
        override func drawBezierPath() {
            print("Draw \(name!)")
            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(1)*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!
lineColor?.setStroke()
path?.stroke()
        }
}

class CzfView : UIView {
    private var shapes : Array<Shape> = []
    override func draw(_ rect: CGRect) {
        for s in shapes {
            s.drawBezierPath()
        }
    }
    shapes.append(shape)
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch:UITouch = touches.first! as UITouch
        
        let point = touch.location(in: self)
        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.
        let starCenter = CGPoint(x: 180, y: 180)
        let star = FiveStar(center: starCenter, radius: 50, angel: 45)
        star.lineColor = UIColor.blue
        let ovalCenter = CGPoint(x: 100, y: 300)
           let ovalSize = CGSize(width: 100, height: 60)
           let oval = Circle(center: ovalCenter, size: ovalSize)
           let rectOrigin = CGPoint(x: 60,y: 50)
           let rectSize = GSize(width: 100, height: 50) 
           let rect = Rectangle(origin: rectOrigin, size: rectSize, corner:6) 
        rect.lineColor = UIColorgray
        
        let myView = CzfView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size width, height: self.view.frame.size.height))
        myView.backgroundColor = UIColor.clear
        myView.add(shape: star) 
        myView.add(shape: oval) 
        myView.add(shape: rect)
        self.view.addSubview(myView)
        }
        }