从另一个视图控制器中的类中快速绘制形状(以编程方式)

Posted

技术标签:

【中文标题】从另一个视图控制器中的类中快速绘制形状(以编程方式)【英文标题】:swift drawing shape from class in another viewcontroller (programatically) 【发布时间】:2015-03-29 23:51:30 【问题描述】:

我正处于制作简单图表的早期阶段。但是,我在以编程方式绘制形状时遇到了一些麻烦。

我已经尝试了很多变体:

let donutChart = CounterView(frame = CGRectMake(100, 100, 100, 100))
cellView.addSubview(donutChart)

没有错误,但是在过去的 2 天里,我无法让它在屏幕上绘制任何东西。

我正在尝试绘制的类是这样的:

import UIKit

let NoOfGlasses = 8
let π:CGFloat = CGFloat(M_PI)

class CounterView: UIView 

var counter: Int = 5 
    didSet 
        if counter <=  NoOfGlasses 
            //the view needs to be refreshed
            setNeedsDisplay()
        
    


var outlineColor: UIColor = UIColor.blueColor()
var counterColor: UIColor = UIColor.orangeColor()

override func drawRect(rect: CGRect) 
    // 1
    let center = CGPoint(x:bounds.width/2, y: bounds.height/2)

    // 2
    let radius: CGFloat = max(bounds.width, bounds.height)

    // 3
    let arcWidth: CGFloat = 76

    // 4
    let startAngle: CGFloat = 3 * π / 4
    let endAngle: CGFloat = π / 4

    // 5
    var path = UIBezierPath(arcCenter: center,
        radius: bounds.width/2 - arcWidth/2,
        startAngle: startAngle,
        endAngle: endAngle,
        clockwise: true)

    // 6
    path.lineWidth = arcWidth
    counterColor.setStroke()
    path.stroke()


这应该导致这个基本形状:

任何有关如何以编程方式在视图控制器中绘制此形状的帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我把你的班级放在操场上。我能够使用以下命令来绘制它:

let myview = CounterView()
myview.frame = CGRectMake(100,100,300,300)
myview.counter = 5

这是它的样子:

【讨论】:

除了测试基本的语言结构外,我在 Playground 方面没有做太多工作。创建视图如何工作?它只是创建一个显示视图的弹出框? 是的。只需单击“快速查看”图标(眼球),它就会在弹出窗口中显示视图。 完美运行。非常感谢!【参考方案2】:

您是否忘记添加屏幕上某些视图的子视图的 CounterView?

【讨论】:

cellView.addSubview(donutChart) 应该这样做,对吗? 您应该将子视图添加到 cellView.contentView。另外,为什么要创建原点为 (100, 100) 的视图?除非单元格真的很高,否则它将把它放在很远的地方和右边。 (这是一款仅限 iPad 的应用程序吗?您的单元格有多高?) 我的“cellView”是我为我的单元格命名的 contentView。至于100,100,100,100,它只是测试抽出来。在问题得到回答并正确绘制后,我将其更改为使用约束而不是当然进行绘制。

以上是关于从另一个视图控制器中的类中快速绘制形状(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取视图控制器的实例

以编程方式 Swift Segue

从另一个类中的 UITextField 访问文本

以编程方式创建形状视图并在集合视图单元格上使用

初学者:如何以编程方式从另一个视图呈现 UITableView

如何在Swift中以编程方式从另一个图像中剪切徽标的形状(png图像)?