2015-11-09 2 views
0

Я использую линейную диаграмму из iOS-диаграмм в пользовательской ячейке таблицы, которая расширяется прикосновением. Я не загружаю диаграммы в cellForRow: так как это загружает все диаграммы во всех ячейках и убивает прокрутку производительности, поэтому я загружаю его в didSelectRow :. Проблема в том, что по какой-то причине диаграмма не загружается при первом обращении пользователя к ячейке, и я понятия не имею, почему. Кроме того, кажется, что анимация диаграммы начинается, когда развернутая ячейка (которая в настоящее время показывает диаграмму) рушится.Как сбросить анимацию iOS-диаграмм в ячейке tableview

Вот мой didSelectRow: и ниже - диаграмма func в моей пользовательской ячейке. Я боролся с этим, любое понимание было бы высоко оценено!

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let cell:CandDetailTableViewCell = tableView.cellForRowAtIndexPath(indexPath) as! CandDetailTableViewCell 

     // CALLS METHOD TO BUILD CHART WITH DATA I SAVED IN THESE ARRAYS 
     cell.setChart(dataForMonths, values: dataForRatings) 

     let previousIndexPath = selectedIndexPath 

     if indexPath == selectedIndexPath { 

     // if user taps cell that was already selected so it collapses 
     selectedIndexPath = nil 

     } else { 

     // when user selects new cell 
     selectedIndexPath = indexPath 
     } 

     var indexPaths:Array <NSIndexPath> = [] 

     if let previous = previousIndexPath { 

     indexPaths += [previous] 
     } 

     if let current = selectedIndexPath { 

     indexPaths += [current] 
     } 

     if indexPaths.count > 0 { 

     tableView.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) 
     } 

     tableView.scrollRectToVisible(tableView.rectForRowAtIndexPath(indexPath), animated: true) 
    } 

Вот диаграмма FUNC в Tableview клетки:

func setChart(dataPoints: [String], values: [Double]) { 

      var dataEntries: [ChartDataEntry] = [] 

      for i in 0..<dataPoints.count { 

      let dataEntry = ChartDataEntry(value: values[i], xIndex: i) 

      dataEntries.append(dataEntry) 
      } 

      let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Rating") 
      let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet) 

      analyticsView.data = lineChartData 
      analyticsView.xAxis.labelPosition = .Bottom 
      analyticsView.backgroundColor = UIColor.whiteColor() 

      analyticsView.userInteractionEnabled = false 
      analyticsView.drawGridBackgroundEnabled = false 
      analyticsView.drawBordersEnabled = false 
      analyticsView.leftAxis.enabled = false 
      analyticsView.rightAxis.enabled = false 
      analyticsView.xAxis.gridLineWidth = 0.0 
      analyticsView.xAxis.axisLineColor = UIColor.clearColor() 

      analyticsView.legend.enabled = false 

      // Removes the description text off the chart 
      analyticsView.descriptionText = "" 

      analyticsView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) 
     } 

ответ

0

первый, положить analyticsView.data = lineChartData после того как вы настроить свой вид чата. Ему нужно прочитать некоторые свойства, чтобы выполнить некоторую математику;

второй, когда и где вы добавляете представление диаграммы в представление содержимого ячейки?

Кроме того, кажется странным, когда вы вызываете tableView.reloadRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic) в didSelectRow, я полагаю, вы должны добавить представление диаграммы в представление содержимого ячейки здесь, а не перезагрузить данные? Потому что он вызывает еще один cellForItemAtIndexPath и переопределяет то, что вы сделали?

в основном если сделаете addSubView, он начнет рисовать график. Вы можете добавить точку останова в addSubView и drawRect в виде линейной диаграммы и посмотреть, может ли она сломаться при попадании в ячейку.

Вы также можете вручную запустить перерисовку по chartView.setneedsDisplay

Update:

Если вы хотите сбросить анимации, вызовите одушевленные API снова и, возможно, другой setNeedsDisplay

+0

Я изменил 'analyticsView.data = lineChartData 'быть в конце после того, как он настроит представление диаграммы; он по-прежнему работает одинаково. Я добавляю представление диаграммы, когда я вызываю 'cell.setChart (dataForMonths, values: dataForRatings)' in didSelectRow: и отображение в UIView в моей ячейке. – tahoecoop

+0

, тогда вы должны начать отладку при вызове drawRect – Wingzero

Смежные вопросы