Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 按按钮和“撤消”按钮仅绘制一个对象_Ios_Swift_Xcode_Calayer_Cashapelayer - Fatal编程技术网

Ios 按按钮和“撤消”按钮仅绘制一个对象

Ios 按按钮和“撤消”按钮仅绘制一个对象,ios,swift,xcode,calayer,cashapelayer,Ios,Swift,Xcode,Calayer,Cashapelayer,我是swift的初学者,现在我正在和可能很简单的事情做斗争 如果我单击按钮undo,MyDrawView应该是清晰的,如果我单击多边形a填充,例如紫色,然后单击圆形,则只有一个对象 大概是这样的: 但现在我有了这个: 我的代码: import UIKit import QuartzCore class MyDrawView: UIView{ var circle = UIBezierPath() let polygon = UIBezierPath() let

我是swift的初学者,现在我正在和可能很简单的事情做斗争

如果我单击按钮undo,MyDrawView应该是清晰的,如果我单击多边形a填充,例如紫色,然后单击圆形,则只有一个对象

大概是这样的:

但现在我有了这个:

我的代码:

import UIKit
import QuartzCore

class MyDrawView: UIView{

    var circle = UIBezierPath()
    let polygon = UIBezierPath()

    let shapeLayer1 = CAShapeLayer()
    let shapeLayer2 = CAShapeLayer()


    func drawCircle(){
        circle = UIBezierPath(arcCenter: CGPoint(x: 200, y: 300), radius: CGFloat(100), startAngle: CGFloat(0), endAngle: CGFloat(Double.pi * 2), clockwise: true)

        shapeLayer1.path = circle.cgPath

        shapeLayer1.fillColor = UIColor.clear.cgColor
        shapeLayer1.strokeColor = UIColor.black.cgColor 
        shapeLayer1.lineWidth = 3.0 

        layer.addSublayer(shapeLayer1)
    }


    func drawPolygon(){
        polygon.move(to: CGPoint(x: 50, y: 50))
        polygon.addLine(to: CGPoint(x: 230, y: 90))
        polygon.addLine(to: CGPoint(x: 240, y: 250))
        polygon.addLine(to: CGPoint(x: 50, y: 280))
        polygon.addLine(to: CGPoint(x: 100, y: 150))
        polygon.addLine(to: CGPoint(x: 50, y: 50))

        shapeLayer4.path = polygon.cgPath

        shapeLayer2.fillColor = UIColor.clear.cgColor 
        shapeLayer2.strokeColor = UIColor.black.cgColor 
        shapeLayer2.lineWidth = 3.0 

         layer.addSublayer(shapeLayer2)
    }


    @IBAction func clickButtonUndo(_ sender: UIButton) {

    }

    @IBAction func clickButtonCircle(_ sender: UIButton) {
        drawCircle()
    }

    @IBAction func clickButtonPolygon(_ sender: UIButton) {
        drawPolygon()
    }




    @IBAction func buttonPurple(_ sender: UIButton) {
        shapeLayer1.path = circle.cgPath
        shapeLayer2.path = polygon.cgPath

        shapeLayer1.fillColor = UIColor.purple.cgColor
        shapeLayer1.strokeColor = UIColor.black.cgColor 
        shapeLayer1.lineWidth = 3.0 

        shapeLayer2.fillColor = UIColor.purple.cgColor 
        shapeLayer2.strokeColor = UIColor.black.cgColor
        shapeLayer2.lineWidth = 3.0 

        layer.addSublayer(shapeLayer1)
        layer.addSublayer(shapeLayer2)

    }

}

您将自己添加两个层

layer.addSublayer(shapeLayer1)
layer.addSublayer(shapeLayer2)
如果你只想要一个形状。。。。仅使用一个shapeLayer。。。在每个按钮点击时指定它的形状。。。并调用
setNeedsLayout()
。。不要对多个形状使用多个ShapeLayer

你可以有一个枚举

public enum ShapeType {
         case circle
         case square
         case star
         case Polygon
     }
那么在你的课堂上

public var shape: ShapeType {
        get {
            return _shape
        }
        set(newValue) {
            _shape = newValue
            setNeedsDisplay()
        }
    }
可以使用默认形状

    private let ilayer = CAShapeLayer()
    private var _shape: ShapeType = .circle
然后你可以写一个函数

// MARK: - Base shape BezierPath

private func getBaseShape(frame:CGRect) -> UIBezierPath? {

    switch _shape {
    case .circle:
        return UIBezierPath(ovalIn: group)
    case .square:
        return  UIBezierPath(roundedRect: group, cornerRadius: 8)
    case .star:
        return drawStarShape()
    case .polygon:
        return drawpolygonPath()

    }
}
并将其分配给形状

let getShapePath = getBaseShape(group: group)

您将自己添加两个层

layer.addSublayer(shapeLayer1)
layer.addSublayer(shapeLayer2)
如果你只想要一个形状。。。。仅使用一个shapeLayer。。。在每个按钮点击时指定它的形状。。。并调用
setNeedsLayout()
。。不要对多个形状使用多个ShapeLayer

你可以有一个枚举

public enum ShapeType {
         case circle
         case square
         case star
         case Polygon
     }
那么在你的课堂上

public var shape: ShapeType {
        get {
            return _shape
        }
        set(newValue) {
            _shape = newValue
            setNeedsDisplay()
        }
    }
可以使用默认形状

    private let ilayer = CAShapeLayer()
    private var _shape: ShapeType = .circle
然后你可以写一个函数

// MARK: - Base shape BezierPath

private func getBaseShape(frame:CGRect) -> UIBezierPath? {

    switch _shape {
    case .circle:
        return UIBezierPath(ovalIn: group)
    case .square:
        return  UIBezierPath(roundedRect: group, cornerRadius: 8)
    case .star:
        return drawStarShape()
    case .polygon:
        return drawpolygonPath()

    }
}
并将其分配给形状

let getShapePath = getBaseShape(group: group)

您可以使用true/false创建一个算法 例如:

var circleBool = true
var polygonBool=真

@IBAction func clickButtonCircle(_ sender: UIButton) {
  if circleBool == true {
    drawCircle()
  polygonBool = false
} }


(对于撤消按钮idk如何清除,但尝试绘制x:0和y:0)

您可以使用true/false创建一个算法 例如:

var circleBool = true
var polygonBool=真

@IBAction func clickButtonCircle(_ sender: UIButton) {
  if circleBool == true {
    drawCircle()
  polygonBool = false
} }

(对于撤消按钮idk如何清除但尝试绘制x:0和y:0)