是否可以在UIViewController
和UIView
之间传递数据?
如果有,怎么样?
我在互联网上找不到任何解释它的东西。
例如,当您按下按钮1时,UIViewController
会向该人按下按钮1的UIView
说明,然后UIView
会绘制一个圆圈。但是,如果您按button2
UIViewController
向UIView说他现在已按下button2
,然后UIView
取消了圆圈并绘制了一个三角形。
按钮是以编程方式构建的。
问题是我如何调用我在drawRect
UIView
内使用UIViewController
绘制的形状。
class ViewController: UIViewController {
@IBOutlet var UnitViewTabeller: UnitView!
var btn: UIButton!
override viewDidLoad {
self.btn = UIButton(frame: CGRectMake(0.04 * view.bounds.width, 0.91 * view.bounds.height, 0.44 * view.bounds.width, 0.07 * view.bounds.height)) //set frame
self.btn.layer.cornerRadius = 10
self.btn.setTitle("0", forState: .Normal) //set button title
self.btn.setTitleColor(UIColor.whiteColor(), forState: .Normal) //set button title color
self.btn.backgroundColor = UIColor(red: 0.2745, green: 0.2784, blue: 0.2706, alpha: 1.0) //set button background color
self.btn.tag = 0 // set button tag
self.btn.addTarget(self, action: "btnclicked:", forControlEvents: .TouchUpInside) //add button action
self.view.addSubview(btn) //add button in view
self.btnArray.append(btw)
}
func btnclicked(sender: UIButton) {
//draw the Circle from the UIView
}
}
class CircleView: UIView {
override func drawRect(rect: CGRect) {
let Circle = UIGraphicsGetCurrentContext()
let rectangle = CGRect(x: 0.2 * bounds.width, y: 0.15 * bounds.height, width: 0.6 * bounds.width, height: 0.6 * bounds.width)
CGContextSetLineWidth(Circle, 4.0)
CGContextAddEllipseInRect(Circle, rectangle)
CGContextStrokePath(Circle)
}
}
答案 0 :(得分:1)
以下是ShapeView
的Swift 3中的一个示例,它在设置shape
属性时重绘自身:
class ShapeView: UIView {
var shape: Shape = .blank {
didSet {
// calling setNeedsDisplay() triggers a redraw of ShapeView
setNeedsDisplay()
}
}
enum Shape {
case circle
case triangle
case blank
}
override func draw(_ rect: CGRect) {
switch shape {
case .circle: drawCircle()
case .triangle: drawTriangle()
default: break
}
}
func drawCircle() {
let circle = UIGraphicsGetCurrentContext()
let rectangle = CGRect(x: 0.2 * bounds.width, y: 0.15 * bounds.height, width: 0.6 * bounds.width, height: 0.6 * bounds.width)
circle?.setLineWidth(4.0)
circle!.addEllipse(in: rectangle)
circle!.strokePath()
}
func drawTriangle() {
// code to draw a triangle
}
}
假设您有ShapeView
个shapeView
对象作为ViewController
的属性,您可以这样称呼它:
func drawCircleButton(_ sender: UIButton) {
shapeView.shape = .circle
}
func drawTriangleButton(_ sender: UIButton) {
shapeView.shape = .triangle
}