将值传递给与 uiview 关联的 class 并让 draw 识别值而不是默认的 class 值

Passing values to the class associated with a uiview and having draw recognize the values instead of the default class values

看看我能不能解释一下...

问题。如何将新值传递到 UIView 的 UIView subclass 中,以便绘制不会每次都呈现相同的东西? "simple" 我错过了什么?

其他说明

谢谢

也许图片有帮助?始终使用“5”

ViewController.swift
...@IBOutlet var graphView: UIView!  // linked to GraphController.swift in Identity Inspector
...var graphController = GraphController() // UIView
...buttonClick
......graphContoller.xCoord = 20
......graphController.yCoord = 20
......graphView.setNeedsDisplay()


GraphController.swift
...var xCoord: Int = 5
...var yCoord: Int = 5
...override func draw(_ rect: CGRect) {
......let rect = CGRect(x: xCoord, y: yCoord, width: 10, height: 10)  <- simplified for example

在我看来,您的 var graphController 是您创建的对象,与您的视图层次结构无关。它抽象地存在,永远不会显示在屏幕上。

如果 graphView 是链接到 IB 中定义的 GraphController class 实例的插座,那么您应该在 graphView 上设置属性,并且应该完全摆脱 var graphController

编辑:

要将评论中的信息收集到答案中:

您对自定义视图 class 的工作方式感到困惑。您没有 "a class associated with a UIView." 您创建了 UIView 的自定义子 class。您的自定义 subclass 是一个 UIView,但它有您添加的额外代码 and/or 属性。

您没有设置视图和管理该视图的控制器对象。 (视图控制器是它管理的所有视图的控制器对象。)您创建自定义视图的实例。 (对于像 table 视图这样的复杂对象,创建一个与您的视图对象协同工作的控制器对象 (UITableViewController) 可能是有意义的,但这是不寻常的,除非您清楚地了解什么,否则您不应该这样做你在做什么,为什么。)

以下是创建 UIView 的自定义子 class 的步骤:

1) 为自定义 class 创建一个新文件,例如MyView.swift:

class MyView: UIView {
  //Your custom properties and and methods go here.
}

2) 在故事板中,将一个新的通用 UIView 对象拖到表单上。 Select 身份检查器并将视图的 class 更改为自定义子 class(在我的示例中为 MyView)。这告诉 IB(Interface Builder)"When you create a view here, create my custom subclass instead of a generic view." 请注意,由于您在步骤 1 中定义了自定义子class,IB 应该为您自动完成 class 名称。

这就像将汽车对象拖到屏幕上,然后选择汽车对象并将其类型从 "car" 切换为 "Prius"。普锐斯是一辆汽车,但它是一种特殊的汽车,具有其他汽车所没有的一些属性。

3) 按住 Control 从您的新自定义视图(本例中为 MyView 对象)拖动到您的视图控制器的源文件中并创建一个插座。由于您在第 2 步中更改了视图类型,Xcode 将使用您的自定义类型设置插座。由于它是正确的类型,您可以 read/write 属性或调用插座上的方法,编译器会让您。