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: UIViewController{
override func viewDidLoad () {
super.viewDidLoad ()
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 = 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)
class Shape {
var name : String?
var sides : Int?
Val origin : CGPoint?
var lineColor : UIColor = UICOLOr.red
var filColor : UICOLOr = UrCoLor.green
var linewiath : CGELoat = 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))")
}
}
Import UInit
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 (\(originCord!.x),\(origin!.y))")
}
}
class ViewController: UIViewController {
override func viewDidLoad () {
super.viewDidLoad ()
let myShape = Shape(name:"BaseShape", sides: 0, origin: CGPoint(x:0, y:0))
myshape. sayHello ()
}
}
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 {
return
}
s.sayHello ()
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad ()
let myShape = Shape(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: CGreet (x: 0, y: 0, width: width,height: height))
myview.shape = myShape
self.view.addSubview(myview)
}
}
func drawBezlerrath() {
let path = UIBezierPath()
let center : CGPoint = CGPolnt (x: 100, y: 100)
let radius : CGFloat = 80
Path.addare(withCenter: center, radius: radius, startAngle: 0,endAngle: CGFLoat.p1*2, clockwise: true)
path.lineWidth = 5
UIColor.red.setStroke()
path.stroke()
}
S.drawBezierrath()
myview.backgroundColor = UIColor.clear
class Shape {
var name : String?
var origin : CGPoint?
var lineColor : UIColor? = UIColor.red
var fil1color : UIColor? = UIColor .green
var lineWidth : CGFloat? = 5
init(name : String, origin : CGPoint) {
self.name = name
self.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 : "Iine", origin: start, start: start, end: end)
}
override func drawBezierPath () {
print ("Draw \(name!)")
let path = UIBezierPath()
path.move (to: start!)
path.addLine (to: end!)
path.linewidth = linewidth!
path.lineCapStyle = .rouna
linecolor?.setstroke()
path.stroke()
}
}
class Rectangle : Shape {
var size : CGSize?
inst(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 = UrBezierPath(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 ()
}
}
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?
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,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)
}
override func drawBezierPath (){
print ("Draw \(name!)")
let path = UIBezierPath(ovalIn: CGRect(loriginorigin!, 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)
}
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
}
let path = UIBezierPath
pach.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 : CGiloat, 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: anges)
}
override func drawBezierPath ( {
//调用贝塞尔曲线函数UIBezierPath ()
let path = UlBezierrath()
let i = 360/angel!
let xzAngle = cGFloat.pi*2/i
let x2X = (center?.X)! - sin(xzAngle) * raaius!
Let xZY = (center? .y)! - cos (xzAngle) * radius!
Let p1 = CGPOint (x: zxX, y: zxY)
path.move(to: p1)
let angle = CGFloat.pi*4/5
for i in 1...5 {
let × - (center?.x)! - sin(CGFloat (i)*angle+×zAngle) *radius!
let y = (center?.y)! - cos(CGFloat (i)*xangletxzAngle) *radius!
path.addLine (to: CGPOint (x: x, y: y) )
}
path.close ()
path.Linewiath = linewidth!
lineColor?.setstroke
path.stroke()
}
}
init (name: String, origin: CGPoint, center: CGPoint, radius : CGtFloat, angel : CGFloat, soundFile : String = "SO.m4a") {
super.init (name: name, origin: origin, soundFile: soundFile)
self.center = center
self.radius = radius
self.angel = angel
}
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.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.main. path (forResource: soundFile, ofType: nil)
let url = URL(fileURLWithPath: path!)
soundPlayer = try? AVAudioPlayer (contentsOf: ur1)
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?.linenidth = linewidth!
path? .linecapstyle = .round
llinecolor?.setstroke(
path?.stroke()
}
}
class Rectangle : Shape {
var size : CGsize?
var corner : CGFloat?
init(name: String, origin: CGPoint, size: CGSize, corner: CGFloat, soundFile :String = "IA.m4a") {
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: "Reatangle", 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,reduis: radtuis, Size: CGSize (wiath: raauis, heione: raduis))
}
convenience init(center : CGPoint, size : CGSize) {
let x = center.x - size.width/2
let y = center.y - size.height/2
selt. init (name: "oval/E11ipsem" , origin: CGPoint (x:x,y:y), center: center, raduis: 0, size: size)
}
override func drawBezierPath() {
print ("Draw \(name!) ")
path = UIBezierPath(ovalIn: CGRect (oriain: origin!, size: size!))
if selectedFlag {
let dashes: [CGFloat] = [1, 3]
path?.setLineDash (dashes, count: dashes . count, phase: 0)
}
path?.linenidth = linevidth!
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 = 1inewidth!
linecolor?.setstroke ()
path?.stroke ()
path?.fi11()
}
}
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: 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)
}
override func drawBezierPath () {
print ("Drav \(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 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 ()
if selectedFlag {
let dashes: [CGFloat] = [1, 3]
path?.setLineDash (dashes, count: dashes. count, phase: 0)
}
path?.lineWidth = lineWidth!
linecolor?.setstroke()
path?. stroke ()
}
}
marile: soundstle
class czfview : UIview {
private var shapes : Array<Shape> = []
override fune draw( rect : cGRect) {
for s in shapes {
s. drawBezierPath()
}
}
func add (shape : Shape) {
shapes.append (shape)
}
override func touchesBegan (_ touches: Set<UITouch>, with event: UIEvent?) {
let touch : UITouch = touches.first! as UIrouch
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 ( )
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 = CGSize(width: 100, height: 50)
let rect = Rectangle(origin: rectOrigin, size: rectSize, corner: 6)
rect.lineColor = UIColor.gray
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)
}
}