Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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 Swift操场类Viewcontroller没有成员“&引用;?_Ios_Swift_Xcode_Viewcontroller_Swift Playground - Fatal编程技术网

Ios Swift操场类Viewcontroller没有成员“&引用;?

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

我对swift编程比较陌生,遇到了这个问题,老实说,我不知道如何解决这个问题。我在操场上有一个viewcontroller,在那个视图上有一个按钮。我有一个名为CanvasView的类,其代码如下:

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
    }
}