当前位置: 首页 > 知识库问答 >
问题:

如何在Swift3 IOS饼图中添加点击手势识别?

孟子墨
2023-03-14

我正在使用Swift 3开发小型IOS应用程序。在那个应用程序里,我想有一个饼图。为了构建饼图,我遵循了这个链接,饼图正在生成。

现在我想再添加一个功能。当用户像任何月份一样点击饼图的某个区域时,它应该打开一个新的控制器并仅显示该月份的详细信息。

我设法添加了手势识别功能。但是当我点击屏幕的任何部分时,它会打开新屏幕。我想限制该抽头功能仅为饼图部分,饼图月份应被捕获。代码是

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))

pieChartView.addGestureRecognizer(gestureRecognizer)

和处理点击代码是

func handleTap(gestureRecognizer: UIGestureRecognizer) {
let monthDetail = storyboard?.instantiateViewController(withIdentifier: "MonthTableView") as! MonthDetailsTableViewController
monthDetail = month  //Should be the month value of Tap area
navigationController?.pushViewController(monthDetail, animated: true)

}

感谢任何帮助!!

==========================

import UIKit
import Charts
import CoreData

class ExpenseViewController: UIViewController, ChartViewDelegate {

@IBOutlet weak var pieChartView: PieChartView!

    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
    var unitsSold = [10.0, 20.0, 10.0, 30.0, 10.0, 10.0]

     override func viewDidLoad() {
        super.viewDidLoad()

        setChart(dataPoints: months, values: unitsSold)

        pieChartView.delegate = self
     }

     func setChart(dataPoints: [String], values: [Double]) {
        var dataEntries: [ChartDataEntry] = []

        for i in 0..<dataPoints.count {
            let dataEntry = PieChartDataEntry(value: values[i], label: dataPoints[i])
            dataEntries.append(dataEntry)
        }


        let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "Units Sold")
        let pieChartData = PieChartData(dataSet: pieChartDataSet)

        pieChartView.data = pieChartData

      }

     func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dataSetIndex: Int, highlight: ChartHighlighter) {
        //print("\(entry.value) in \(months[entry.xIndex])")
        print("Y = \(entry.y) ")
        print("X = \(entry.x) ")
    }

}

共有2个答案

羊舌高明
2023-03-14

handleTap中,使用手势识别器的locationInView来找出点击在图表的哪个部分(如果有的话),并做出相应的响应。

寇坚成
2023-03-14

检查Appcoda教程中的触摸事件部分,您会发现ChartViewDelegate方法chartValueSelected,因此您需要使用该方法而不是UITapgestureRecognitizer

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
     print("\(entry.value) in \(yourArray[entry.xIndex])")
}
 类似资料:
  • 问题内容: 如何将趋势线添加到使用matplotlib.scatter绘制的点图上? 问题答案: 如这里解释 在numpy的帮助下,您可以计算出例如线性拟合。

  • 问题内容: 我正在编写一个应用程序,并且正在使用它来显示一些文本。现在,我想在文本区域中显示一些可点击的URL以及普通文本,如果用户单击URL,那么URL引用的网页应在新的Web浏览器窗口中打开。 问题答案: 将JEditorPane与HTMLEditorKit或JTextPane结合使用,并将内容类型设置为“ text / html”

  • 本文向大家介绍iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势),包括了iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势)的使用技巧和注意事项,需要的朋友参考一下 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性。 1、UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的

  • 本文向大家介绍AndroidStudio:手势识别,包括了AndroidStudio:手势识别的使用技巧和注意事项,需要的朋友参考一下 一内容:设计一个手写字体识别程序。 二实现 ①建立一个存放手写字体的数据库 ②activity_main.xml 3.MainActivity.java 三效果 以上所述是小编给大家介绍的AndroidStudio手势识别详解整合,希望对大家有所帮助,如果大家有任

  • 问题内容: 我的目标是从安装在太阳点上的加速度计识别简单的手势。手势可以像旋转设备或以几种不同的动作移动设备一样简单。该设备目前仅具有加速度计,但是我们正在考虑添加陀螺仪,以使其更容易/更准确。 有人对如何做到这一点有建议吗?Java中是否有可用的库?您推荐我查看的示例项目?您推荐的论文? 这个亮点是一个Java平台,可帮助您快速制作系统原型。它使用Java编程,可以将命令中继回连接到计算机的基站

  • 问题内容: 我是React的新手,对某种基本的东西感到困惑。 我需要在单击事件后呈现DOM之后将组件添加到DOM。 我最初的尝试如下,但是没有用。但这是我想尝试的最好的方法。(预先为将jQuery与React混合使用而道歉。) 希望我已经清楚需要做什么,希望您能帮助我获得适当的解决方案。 问题答案: 正如@Alex McMillan所提到的那样,使用state来指示应在dom中呈现的内容。 在下面

  • 问题内容: 我的手势有点麻烦。 我正在尝试在同一个按钮上同时使用水龙头和长按,所以我已经使用了 和 但是当我点击时,我的按钮似乎对这两种功能都有反应。可能是什么问题? 问题答案: 很难说什么与您的代码不兼容,仅提供了两行,但是我建议您以这种方式进行: 为按钮创建插座 然后将手势添加到按钮中 然后创建动作来处理水龙头 Swift 3.0版本: Swift 5.x的更新语法:

  • 问题内容: 我正在尝试将手势识别器添加到表视图单元格中的对象(特别是图像)上。现在,我对手势识别器很熟悉,但是对于如何进行设置感到有些困惑。实际的表格单元格没有viewDidLoad方法,因此我认为无法在其中声明手势识别器。 这个问题UIGestureRecognizer和UITableViewCell问题似乎相关,但是答案是在目标C中,不幸的是,我只是精通流利。 如果有人可以帮助我解决如何将手势