看看我能不能解释一下...
- 有一个 ViewController,它具有为两个 UIView 定义的导出以显示图表。
- UIView 具有通过身份检查器的“自定义类”类属性附加到它们的类。
- 每个类都有一个重写“draw”来绘制图表,它在启动时会这样做。
- 要绘制的项目(矩形)的某些值使用定义为具有默认值的 var 的类变量
- 在 Controller 中,我将变量设置为新值,但是当 draw 方法被调用时(通过 Controller 中的 outletName.setNeedsDisplay()),它使用类的默认值。
问题。如何将新值传递到 UIView 的 UIView 子类中,以便绘制不会每次都呈现相同的东西?我缺少什么“简单”的东西?
其他注意事项
- 首先让 currentContext = UIGraphicsGetCurrentContext() 没问题 时间,无后续时间
- 我在 View Controller 中设置标签值并在绘图中更改它 方法和控件有新的值(value)
- draw 方法中的打印语句全部打印到控制台 时间
谢谢
也许图片有帮助?总是使用“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
是您创建的一个对象,与您的 View 层次结构无关。它抽象地存在,永远不会显示在屏幕上。
如果 graphView
是链接到 IB 中定义的 GraphController
类实例的导出,那么您应该在 graphView
上设置属性,并且应该完全摆脱 var graphController
。
编辑:
将评论中的信息收集到答案中:
您对自定义 View 类的工作方式感到困惑。您没有“与 UIView 关联的类”。您创建 UIView 的自定义子类。您的自定义子类是一个 UIView,但它有您添加的额外代码和/或属性。
您无需设置 View 和管理该 View 的 Controller 对象。 ( View Controller 是它管理的所有 View 的 Controller 对象。)您创建自定义 View 的实例。 (对于像 TableView 这样的复杂对象,创建一个与 View 对象协同工作的 Controller 对象 (UITableViewController) 可能是有意义的,但这是不寻常的,除非你清楚地了解你在做什么,否则你不应该这样做为什么。)
以下是创建 UIView 的自定义子类的步骤:
1) 为自定义类创建一个新文件,例如我的 View .swift:
class MyView: UIView {
//Your custom properties and and methods go here.
}
2) 在您的 Storyboard中,将一个新的通用 UIView
对象拖到窗体上。选择身份检查器并将 View 的类更改为您的自定义子类(在我的示例中为 MyView)。这告诉 IB(Interface Builder)“当你在这里创建一个 View 时,创建我的自定义子类而不是通用 View 。”请注意,由于您在第 1 步中定义了自定义子类,IB 应该为您自动完成类名。
这就像将汽车对象拖到屏幕上,然后选择汽车对象并将其类型从“汽车”切换为“普锐斯”。 Prius 是一辆汽车,但它是一种特殊的汽车,具有其他汽车所没有的某些属性。
3) 按住 Control 从您的新自定义 View (本例中为 MyView 对象)拖动到您的 View Controller 的源文件中并创建一个 socket 。由于您在第 2 步中更改了 View 类型,Xcode 将使用您的自定义类型设置 socket 。由于它是正确的类型,您可以读取/写入属性或调用 socket 上的方法,编译器会让您这样做。
关于ios - 将值传递给与 uiview 关联的类并让 draw 识别值而不是默认类值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436948/