Ios 按按钮和“撤消”按钮仅绘制一个对象
我是swift的初学者,现在我正在和可能很简单的事情做斗争 如果我单击按钮undo,MyDrawView应该是清晰的,如果我单击多边形a填充,例如紫色,然后单击圆形,则只有一个对象 大概是这样的: 但现在我有了这个: 我的代码: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
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)