import UIKit
class CoreGraphUIView : UIView{
override func touchesBegan(_touches:Set<UITouch>, with event: UIEvent?){
self.backgroundColor= UIColor.red
print("Brgan:\(touches)")
}
override func touchesEnded(_touches:Set<UITouch>,with event: UIEvent?){
self.backgroundColor= UIColor.red
print("Began:\(touches)")
}
override func touchesMoved(_touches: Set<UITouch>,with event: UIEvent?){
self.backgroundColor = UIColor.lightGray
print("Ended:\(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 grapView = CoreGraphUIView(frame: graphFrame)
graphView.backgroundColor =UIColor.white
self.view.addSubview(graphView)
}
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.x),\(origin!.y)")
}
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.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 : CGPLoat=2
init(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\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) )
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.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 : CGPLoat=2
init(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\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) )
myView.shape = myShape
self.view.addSubview(myView)
}
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\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) )
myView.shape = myShape
self.view.addSubview(myView)
}
}
import UIKit
import Foundation
import AVFoundation
class Shape {
var name : String?
var soundPlayer : AVAudioPlayer?
var soundFile : String?
var path : UIBezierPath?
var selectedFlay : 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(conventsOf: 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?.setSteoke()
path?.stroke()
}
}
class Rectangle: Shape{
var size: CGSzie?
var corner : CGFloat?
init(name: String,origin : CGPoint,size :CGSzie,corner :CGFloat,soundFile:String="la.m4a"){
super.init(name:name,origin:origin,soundFile: soundFile)
self.size=size
self.corner =corner
}
convenience 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] =lineWidth!
lineColor?.setSteoke()
path?.stroke()
}
}
class Circle : Shape{
var center : CGPoint?
var raduis :CGFloat?
var size: CGSzie?
init(name:String,origin : CGPoint,center: CGPoint, raduis :CGFloat, size:CGSzie,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:CGSzie(width:raduis,height:raduis))
}
convenience init(center: CGPoint,size: CGSzie){
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!)")
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?.setSteoke()
path?.stroke()
}
}
class Polygons : Shape{
var points: Array<CGPoint>?
init(name:String,origin:CGPoint,soundFile:soundFile:soundFile)
self.points=points
}
convenience init(points :Array<CGPoint>){
if points.count ==3{
self.init(name: "Polygons", 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:each)
}
path?.close()
path?.lineWidth= lineWidth!
lineColor?.setSteoke()
path?.fill()
}
}
class FiveStar : Shape{
var center : CGPoint?
var raduis : CGFloat?
var angle :CGFloat?
init(name: String,origin:CGPoint,center : CGPoint,raduis :CGFloat,angel :
CGFloat,soundFile:String="SO.m4a"){
super.init(name:name,origin:origin,soundFile:soundFile)
self.center=center
self.raduis=raduis
self.angel=angel
}
convenience init(center : CGPoint, raduis :CGFloat,angel:CGFloat=0){
let x=center.x-raduis
let y=center.y-raduis
self.init(name:"FiveStar", origin:CGPoint(x:x,y:y),center:center,raduis:raduis,angel:angel)
}
override func drawBezierPath(){
print("Draw\()name!")
path = UIBezierPath
let i =360/qngel!
let xzAngle = CGFloat.pi*2/i
let xzX = (center?.x)! - sin(xzAngle)*raduis!
let xzY = (center?.y)! - sin(xzAngle)*raduis!
let p1 = CGPoint(x: xzX, y: xzy)
path?.move(to: p1)
let angle = CGPoint.pi*4/5
for i in 1...5 {
let x = (center?.x)! - sin(CGFloat(i)*angle+xzAngle)*raduis!
let y = (center?.y)! - cos(CGFloat(i)*angle+xzAngle)*raduis!
path?.addLine(to: CGFloat(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?.setSteoke()
path?.stroke()
}
}
class CzfView : UIView {
private var shapes : Array<Shape> = []
override func draw(_rect: CGRect) {
for s in shapes {
s.drawBezierPath()
}
}
func add(shape : Shape) {
Shapes.append(shape)
}
override func touchesBegann(_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 ViewController() {
super.ViewController()
let starCenter = CGPoint(x: 180,y: 180)
}
}
import UIKit
class CoreGraphUIView : UIView{
override func touchesBegan(_touches:Set<UITouch>, with event: UIEvent?){
self.backgroundColor= UIColor.red
print("Brgan:\(touches)")
}
override func touchesEnded(_touches:Set<UITouch>,with event: UIEvent?){
self.backgroundColor= UIColor.red
print("Began:\(touches)")
}
override func touchesMoved(_touches: Set<UITouch>,with event: UIEvent?){
self.backgroundColor = UIColor.lightGray
print("Ended:\(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 grapView = CoreGraphUIView(frame: graphFrame)
graphView.backgroundColor =UIColor.white
self.view.addSubview(graphView)
}
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.x),\(origin!.y)")
}
}
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(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\origin!.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 : CGPLoat=2
init(name : String, sides:Int,origin: CGPoint){
self.naem=name
self.sides=sides
self.origin=origin
}
func sayHello(){
print("Shape is \(name!),sides \(sides!),and originCord is (\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) )
myView.shape = myShape
self.view.addSubview(myView)
}
}
5.4 奏响乐队凯歌
import UIKit
import Foundation
import AVFoundation
class Shape {
var name : String?
var soundPlayer : AVAudioPlayer?
var soundFile : String?
var path : UIBezierPath?
var selectedFlay : 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(conventsOf: 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?.setSteoke()
path?.stroke()
}
}
class Rectangle: Shape{
var size: CGSzie?
var corner : CGFloat?
init(name: String,origin : CGPoint,size :CGSzie,corner :CGFloat,soundFile:String="la.m4a"){
super.init(name:name,origin:origin,soundFile: soundFile)
self.size=size
self.corner =corner
}
convenience 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] =lineWidth!
lineColor?.setSteoke()
path?.stroke()
}
}
class Circle : Shape{
var center : CGPoint?
var raduis :CGFloat?
var size: CGSzie?
init(name:String,origin : CGPoint,center: CGPoint, raduis :CGFloat, size:CGSzie,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:CGSzie(width:raduis,height:raduis))
}
convenience init(center: CGPoint,size: CGSzie){
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!)")
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?.setSteoke()
path?.stroke()
}
}
class Polygons : Shape{
var points: Array<CGPoint>?
init(name:String,origin:CGPoint,soundFile:soundFile:soundFile)
self.points=points
}
convenience init(points :Array<CGPoint>){
if points.count ==3{
self.init(name: "Polygons", 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:each)
}
path?.close()
path?.lineWidth= lineWidth!
lineColor?.setSteoke()
path?.fill()
}
}
class FiveStar : Shape{
var center : CGPoint?
var raduis : CGFloat?
var angle :CGFloat?
init(name: String,origin:CGPoint,center : CGPoint,raduis :CGFloat,angel :
CGFloat,soundFile:String="SO.m4a"){
super.init(name:name,origin:origin,soundFile:soundFile)
self.center=center
self.raduis=raduis
self.angel=angel
}
convenience init(center : CGPoint, raduis :CGFloat,angel:CGFloat=0){
let x=center.x-raduis
let y=center.y-raduis
self.init(name:"FiveStar", origin:CGPoint(x:x,y:y),center:center,raduis:raduis,angel:angel)
}
override func drawBezierPath(){
print("Draw\()name!")
path = UIBezierPath
let i =360/qngel!
let xzAngle = CGFloat.pi*2/i
let xzX = (center?.x)! - sin(xzAngle)*raduis!
let xzY = (center?.y)! - sin(xzAngle)*raduis!
let p1 = CGPoint(x: xzX, y: xzy)
path?.move(to: p1)
let angle = CGPoint.pi*4/5
for i in 1...5 {
let x = (center?.x)! - sin(CGFloat(i)*angle+xzAngle)*raduis!
let y = (center?.y)! - cos(CGFloat(i)*angle+xzAngle)*raduis!
path?.addLine(to: CGFloat(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?.setSteoke()
path?.stroke()
}
}
class CzfView : UIView {
private var shapes : Array<Shape> = []
override func draw(_rect: CGRect) {
for s in shapes {
s.drawBezierPath()
}
}
func add(shape : Shape) {
Shapes.append(shape)
}
override func touchesBegann(_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 {
}