如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图?

2024-01-16

我是一名新手程序员,最近开始学习 Swift。

我正在 Swift 中制作一个项目,我的目的是在引入参数的同一视图中绘制用户引入的信号函数(使用由 PNLineChart 类控制的子视图)。

事实上,我使用 CocoaPods 安装了 PNChart 库,并使用 Objective C 标头的桥接标头。问题是,在 ObjC 中使用类和方法的方法是将它们“翻译”为 Swift 语法。我发现 PNChart 有作者制作的 Swift 实现,但 Pods 不提供(如果有人知道如何将它们放入我的项目中,也会很有帮助)。

好吧,作者在其 wiki 中给出的绘制数组图的 ObjC 代码如下:

#import "PNChart.h"

//For Line Chart
PNLineChart * lineChart = [[PNLineChart alloc] initWithFrame:CGRectMake(0, 135.0, SCREEN_WIDTH, 200.0)];
[lineChart setXLabels:@[@"SEP 1",@"SEP 2",@"SEP 3",@"SEP 4",@"SEP 5"]];

// Line Chart No.1
NSArray * data01Array = @[@60.1, @160.1, @126.4, @262.2, @186.2];
PNLineChartData *data01 = [PNLineChartData new];
data01.color = PNFreshGreen;
data01.itemCount = lineChart.xLabels.count;
data01.getData = ^(NSUInteger index) {
    CGFloat yValue = [data01Array[index] floatValue];
    return [PNLineChartDataItem dataItemWithY:yValue];
};
// Line Chart No.2
NSArray * data02Array = @[@20.1, @180.1, @26.4, @202.2, @126.2];
PNLineChartData *data02 = [PNLineChartData new];
data02.color = PNTwitterColor;
data02.itemCount = lineChart.xLabels.count;
data02.getData = ^(NSUInteger index) {
    CGFloat yValue = [data02Array[index] floatValue];
    return [PNLineChartDataItem dataItemWithY:yValue];
};

lineChart.chartData = @[data01, data02];
[lineChart strokeChart];

所以我尝试将其转换为 Swift,其中:

  • 输入信号:UITextField! -> 将是用户介绍数学函数的文本字段(仍在开发中)
  • 其他 IBOutlet -> 设置功能限制和全局图表限制的参数
  • 输入SignalLineChart:PNLineChart! -> 将子View连接到ViewController
  • initSignalExample -> 用于测试绘图的初始数组
  • signalObtainedValues -> PNLineChartData 类型的声明

在 viewDidLoad() 函数内,我启动一个初始图表来测试它是否在视图中工作。当我尝试使用 PNLineChartData 类中定义的方法 getData() 时,问题就出现了,但我实际上无法将其转换为正确的 Swift 代码。

我的理解是 getData 有一个名为 index 的 UInteger 作为输入(我认为它会选择单个数据,但我没有看到它在任何地方声明:-/),并且作为输出它返回一个 PNLineChartDataItem()。正如我在 ObjC 代码中看到的,执行此操作的方法有点类似于 PNLineChartDataItem(y: CGFloat),所以我想我可以执行下面向您展示的代码:

import UIKit


class ViewController: UIViewController, PNChartDelegate{


    @IBOutlet weak var inputSignal: UITextField!

    @IBOutlet weak var initialTimeInputSignal: UITextField!

    @IBOutlet weak var finalTimeInputSignal: UITextField!

    @IBOutlet weak var initialGlobalTime: UITextField!
    @IBOutlet weak var finalGlobalTime: UITextField!

    @IBOutlet weak var inputSignalLineChart: PNLineChart!

    let screenWidth = UIScreen.mainScreen().bounds.size.width
    let screenHeight = UIScreen.mainScreen().bounds.size.height
    let initSignalExample = [0.0, 1.0, 1.0, 1.0, 0.0]
    let signalObtainedValues: PNLineChartData!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = UIColor.cyanColor()

        inputSignalLineChart.delegate = self
        inputSignalLineChart.frame = CGRectMake(0, 135.0, screenWidth, screenHeight)
        inputSignalLineChart.backgroundColor = UIColor.whiteColor()
        inputSignalLineChart.setXLabels(["0","1","2","3","4"], withWidth: 1)
        //signalObtainedValues.color = UIColor.greenColor()
        //signalObtainedValues.itemCount = UInt(inputSignalLineChart.xLabels.count)

        signalObtainedValues.getData(UInt(index)) = { PNLineChartDataItem(y: CGFloat(initSignalExample[index]))

        }

        //inputSignalLineChart.chartData = [signalObtainedValues]
        inputSignalLineChart.strokeChart()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

尝试和尝试我只得到错误:无法分配给该表达式的结果,在 getData() 行中。所以我认为这是我用 Swift 编写的代码的语法。有谁知道如何执行此操作并在子视图中正确绘制图表?任何答案或有用的提示将不胜感激。谢谢你!


也许这可以写成如下的闭包:

signalObtainedValues.getData() = {
    index in
    let yValue: CGFloat = initSignalExample[UInt(index)]
    return PNLineChartDataItem(y: yValue)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图? 的相关文章

  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 Swift 中从 UIScrollView 创建 PDF 文件

    我想从 UIScrollView 的内容创建一个 PDF 文件 func createPdfFromView aView UIView saveToDocumentsWithFileName fileName String let pdfD
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 如何接收有关与我共享的记录中所做更改的 CloudKit 通知?

    我有两个 iCloud 帐户 A and B 在两个不同的设备上 来自其中之一 A 我将 ckrecord 分享给另一个人 B 像这样 let controller UICloudSharingController controller p
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我

随机推荐

  • 嵌入或引用关系

    我使用 mongodb 和 mongoid gem 我想得到一些建议 我有一个应用程序 其中用户has many市场与市场has many产品 我需要在属于用户的所有 或任何 市场中搜索特定价格范围内的产品 哪种关系更适合这种情况 嵌入关系
  • ActiveRecord :includes - 如何使用带有加载关联的地图?

    我有一个小型 Rails 应用程序 我正在尝试获取一些订单统计信息 所以我有一个管理模型和一个订单模型 具有一对多关联 class Admin lt ActiveRecord Base attr accessible name has ma
  • 多线程将对象引用传递给静态帮助器方法

    我只是 Java 的初学者 偶然发现了多线程应用程序 我知道这个问题与这里的一些帖子类似 但我找不到更好的答案来回答我的问题 基本上 我想将对象传递给静态方法 该方法将仅根据对象的值 属性返回输出 对于每次调用 我都会创建该对象的一个 新实
  • 视图控制器可以访问传入 Segue 的标识符吗?

    视图控制器可以访问用于转换到它的 Segue 的标识符吗 例如 我使用带有标识符 mySegue 的 Segue 从视图控制器 A 转换到视图控制器 B 无论如何 视图控制器 B 是否可以获取 segue 的标识符 我不相信有这样的财产 这
  • JAX-RS 中的 @Produces 注释

    我的服务方法产生其中之一MediaTypes它可能会产生pdf or excel文件或其他 Produces application pdf application vnd ms excel 我的问题 我的服务返回响应类型applicati
  • 在 Swift 中使用实时滤镜录制视频

    我是 swift 的新手 试图构建一个相机应用程序 它可以应用实时滤镜 并使用应用的滤镜进行保存 到目前为止 我可以使用应用的滤镜实时预览 但当我保存视频时 它全黑了 import UIKit import AVFoundation imp
  • 发布模式出错,但调试模式下不出错

    我的代码在调试模式下运行良好 但在发布模式下失败 这是我失败的代码片段 LOADER gt AllocBundle m InitialContent while m InitialContent isReady this gt Loadin
  • 带 Plotly 的树形图:空白屏幕?

    我正在使用 R 编程语言 我正在尝试遵循此处提供的答案 R 中使用plotly 绘制树形图 https stackoverflow com questions 72179306 treemap plot with plotly in r 我
  • “索引签名参数类型不能是联合类型。” – 我应该用什么来代替?

    当我尝试编译此 Typescript 代码时 interface Foo foo hello world string 我收到此错误消息 索引签名参数类型不能是联合类型 考虑改用映射对象类型 什么是映射对象类型 如何使用它 映射的对象类型对
  • 检查变量是否是字符串的简单方法?

    这个问题是一个衍生问题 是 Array 的实例 但 不是 String 的实例 https stackoverflow com questions 12254658 is an instance of array but isnt of s
  • 使用 Microsoft Graph 客户端创建日历事件

    我正在尝试弄清楚如何使用 Microsoft Graph JavaScript 客户端创建日历事件 我已经设法找回必要的accessToken并且可以与 API 交互 即检索事件 日历 前 10 封电子邮件 但我不确定如何使用 API 来创
  • Laravel 4:如何更新 Eloquent 模型中的多个字段?

    如何更新 Eloquent 模型中的多个字段 假设我是这样得到的 user User where username rok 然后我就有了所有这些模型参数 new user data array email gt email protecte
  • ZF2 - Zend Framework 2,了解路由

    我正在尝试了解 ZF2 中的模块路由 目前我只能为单个操作创建一个控制器 并且正在努力找出这个路由 我查看了其他模块和插件 我有点明白了 只需要一点点推动就可以 得到它 在此示例中 我尝试路由到两个操作 indexAction 和 cmst
  • 粘贴前检查剪贴板的内容

    在Excel VBA中粘贴之前是否可以检查剪贴板的内容 我今天有这个 Sheets Add After Sheets Sheets Count Create new sheet ActiveSheet Paste Paste from Cl
  • Android 按钮位置编程

    我的应用程序中有一个按钮 我想以编程方式更改其位置 我在 XML 中创建了一个按钮 如下所示
  • 如何使用 phinx 编写迁移来插入记录?

    我在用着phinx http docs phinx org 为了处理新项目的迁移 现在我需要创建一个新表并向其中插入一些行 我有 tableStatus this gt table status tableStatus gt addColu
  • PERF_TYPE_HARDWARE 和 PERF_TYPE_HW_CACHE 并发监控

    我正在研究一个自定义实现perf event open系统调用 该实施旨在支持各种PERF TYPE HARDWARE PERF TYPE SOFTWARE and PERF TYPE HW CACHE活动为任何核心上的特定线程 In 英特
  • argparse —— 可选参数需要 2 个值或没有值

    我正在尝试为脚本创建一个可选参数 该参数可以不带任何值 也可以带 2 个值 仅此而已 你能使用 argparse 来完成这个任务吗 desired output script py a gt works script py a val1 g
  • 扭曲的延迟/回调和异步执行

    我试图弄清楚如何使用twisted使我的代码更加异步 函数返回一个延迟对象 然后我添加回调列表 延迟函数通过以下方式提供一些结果后将调用第一个回调deferred obj callback 然后 在回调链中 第一个回调将处理数据并调用第二个
  • 如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图?

    我是一名新手程序员 最近开始学习 Swift 我正在 Swift 中制作一个项目 我的目的是在引入参数的同一视图中绘制用户引入的信号函数 使用由 PNLineChart 类控制的子视图 事实上 我使用 CocoaPods 安装了 PNCha