Ios Swift操场类Viewcontroller没有成员“&引用;?
我对swift编程比较陌生,遇到了这个问题,老实说,我不知道如何解决这个问题。我在操场上有一个viewcontroller,在那个视图上有一个按钮。我有一个名为CanvasView的类,其代码如下:Ios Swift操场类Viewcontroller没有成员“&引用;?,ios,swift,xcode,viewcontroller,swift-playground,Ios,Swift,Xcode,Viewcontroller,Swift Playground,我对swift编程比较陌生,遇到了这个问题,老实说,我不知道如何解决这个问题。我在操场上有一个viewcontroller,在那个视图上有一个按钮。我有一个名为CanvasView的类,其代码如下: import UIKit import PlaygroundSupport public class CanvasView: UIView { var lineColor: UIColor! var lineWidth: CGFloat! var path: UIBezierPath! var
import UIKit
import PlaygroundSupport
public class CanvasView: UIView {
var lineColor: UIColor!
var lineWidth: CGFloat!
var path: UIBezierPath!
var touchPoint: CGPoint!
var startPoint: CGPoint!
public override func layoutSubviews() {
setupDefaultSettings()
}
// control touches
public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
startPoint = touch.location(in: self)
path = UIBezierPath()
path.move(to: startPoint)
}
}
public override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
touchPoint = touch.location(in: self)
}
path.addLine(to: touchPoint)
startPoint = touchPoint
drawShapeLayer()
}
// Function to clear the drawn path
func clearCanvas() {
guard let path = path else { return }
path.removeAllPoints()
layer.sublayers = nil
setNeedsDisplay()
}
// draw shape on layer
public func drawShapeLayer() {
guard let path = path else { return }
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = lineColor.cgColor
shapeLayer.lineWidth = lineWidth
shapeLayer.fillColor = UIColor.clear.cgColor
layer.addSublayer(shapeLayer)
setNeedsDisplay()
}
public func setupDefaultSettings() {
lineColor = .black
lineWidth = 5
clipsToBounds = true
isMultipleTouchEnabled = false
}
}
我确实复制了类CanvasView,所以可能有什么东西把方法的调用搞砸了。如果有人能帮我解决这个(可能是非常愚蠢的)问题,我将非常感激,请记住这是在mac上的操场上制作的,而不是在xcode中。万分感谢 您当前的
clearDrawView()
实际上不是一个成员,而是viewDidLoad()
中的一个嵌套函数
将定义移动到类级别应该会有所帮助。但是,您还必须将drawView
定义为成员(即在类级别),以使其对clearDrawView()
可见:
公共类GameViewController:UIViewController{
let drawView=CanvasView()//太感谢了,老兄!真不敢相信我还没试过!
import Foundation
import CoreML
import UIKit
import PlaygroundSupport
public class GameViewController : UIViewController {
public override func viewDidLoad() {
super.viewDidLoad()
//MARK: Variables and constants
let yellowColor = UIColor(red:1.00, green:0.92, blue:0.23, alpha:1.0)
var roundNumber = 1
var currentScore = 0
//MARK: Setting up the UI
//Setting up the initial view
let view = UIView()
self.view = view
view.backgroundColor = yellowColor
//Adding the view which can be drawn on
let drawView = CanvasView()
drawView.backgroundColor = UIColor.white
drawView.frame = CGRect(x: 12.5, y: 250, width: 350, height: 350)
drawView.layer.cornerRadius = 20
view.addSubview(drawView)
//Adding a button to start the round
let startRoundButton = UIButton()
startRoundButton.frame = CGRect(x: 0, y: 50, width: 100, height: 50)
view.addSubview(startRoundButton)
startRoundButton.addTarget(self, action: #selector(startRoundButtonPressed), for: .touchUpInside)
//Adding a button clear the canvas
let clearCanvasButton = UIButton()
let clearCanvasButtonImage = UIImage(named: "clearButton")
clearCanvasButton.setImage(clearCanvasButtonImage, for: .normal)
clearCanvasButton.frame = CGRect(x: 12.5, y: 620, width: 110, height: 27)
view.addSubview(clearCanvasButton)
clearCanvasButton.addTarget(self, action: #selector(clearCanvasButtonPressed), for: .touchUpInside)
//MARK: Functions
func clearDrawView() {
drawView.clearCanvas()
}
}
@objc func startRoundButtonPressed() {
}
@objc func clearCanvasButtonPressed() {
GameViewController.clearDrawView()
}
}
public class GameViewController : UIViewController {
let drawView = CanvasView() // <--- move it here from viewDidLoad()
public override func viewDidLoad() {
super.viewDidLoad()
// do the necessary stuff, including drawView setup
}
func clearDrawView() {
drawView.clearCanvas()
}
@objc func clearCanvasButtonPressed() {
clearDrawView() // note: not "GameViewController.clearDrawView()" because it's an instance method
}
}