Em primeiro lugar, ótima biblioteca. Gostaria de ter encontrado esta biblioteca antes, ainda estou aprendendo todos os recursos. Há um recurso básico, no entanto, preciso de ajuda para configurá-lo, que é traçar um gráfico de linha simples ou gráfico de barras com 100 pontos de dados, mas em vez de exibir todos esses 100 pontos de dados quando o gráfico aparecer, há um forma padrão para mostrar os últimos 10 pontos de dados ou os primeiros 10 pontos de dados e, em seguida, o usuário pode rolar para visualizar o resto. Este recurso está disponível e como configurá-lo? Thnx
Descobri que é parecido com meu antigo post. O que eu estava pedindo é para restaurar o estado de deslocamento de escala / rolagem enquanto voltava ao gráfico. Você pode dar uma olhada em : https : //github.com/danielgindi/ios-charts/issues/226
Obrigado pela sua resposta rápida, eu vi aquele post antes, mas ainda não desisti de ter certeza do que definir para atingir o objetivo desejado. Eu só tenho 1 VC, então não preciso transportar o 2º VC. se houver o mesmo código será muito apreciado.
Não tenho certeza, mas não é uma tarefa fácil poder chegar a uma solução muito rapidamente.
Se eu fosse você, primeiro examinaria panGestureRecognized
e pinchGestureRecognized
para entender como o zoom / rolagem é implementado. Geralmente, é necessário fazer alguns cálculos sobre a localização de toque e obter o novo valor de escala / tradução e fazer CGAffineTransform
e atualizar a matriz por meio de viewPortHandler.refresh()
Existem muitas APIs que podem ajudar em ChartTransformer
e ChartViewPortHandler
. Para converter os valores dos dados e os pixels da tela entre si.
Você tem que pensar sobre como calcular o primeiro / último valor de conversão de 10 pontos de dados de acordo com o nível de escala. Posso supor que se conseguisse obter o valor do ponto de dados específico dado o nível de escala, tente fazer alguns cálculos para permitir que viewPortHandler.contentRect contenha apenas os dados de que você precisa (por meio dos primeiros dados e do último ponto de dados x valor), para que possamos calcular os limites e deslocamento, e atualize a matriz.
Bem-vindo melhores respostas :) Eu só dou alguns segundos para pensar sobre isso e continuar meu trabalho.
Obviamente, você precisa entender como criamos a matriz por meio de:
self._viewPortHandler.restrainViewPort(offsetLeft: left, offsetTop: top, offsetRight: right, offsetBottom: bottom)
prepareOffsetMatrix()
prepareValuePxMatrix()
Consegui isso depois de brincar um pouco com ele. Na verdade, é bastante simples.
chart.data = data; // This is the MAIN reason, data for the chart has to be set first before the next 2 steps otherwise they will just get ignored like nothing has been set.
// defina o ponto de dados máximo x para 10, que é o que eu queria, mostrando apenas 10 pontos de dados para a linha ou gráfico de barras, de 100 pontos de dados.
[gráfico setVisibleXRan geMaximum: 10 ];
// mova a visualização do gráfico para o índice 90 de X, que são as últimas 10 entradas que desejo ver. e funciona conforme o esperado.
[gráfico mo veViewToX: 90 ];
boa pegada!
Se você não deseja 'bloquear' a visualização para exibir apenas 10 pontos de dados, você pode usar o seguinte em viewDidLoad.
float xScale = totalPoints / initialPointsDisplayed;
[ zoom do gráfico scaleY: 1,0 x: 0,0 y: 0,0];
[self.chartView mo veViewToX: totalPoints - initialPointsDisplayed];
@spauldingim Eu estava tendo um problema ao redefinir os dados do meu gráfico de barras em que aumentaria muito o zoom ao chamar o código acima novamente.
Corrigido, primeiro diminuindo o zoom a cada vez:
barChartView.zoom(scaleX: 0, scaleY: 0, x: 0, y: 0)
Comentários muito úteis
@spauldingim Eu estava tendo um problema ao redefinir os dados do meu gráfico de barras em que aumentaria muito o zoom ao chamar o código acima novamente.
Corrigido, primeiro diminuindo o zoom a cada vez:
barChartView.zoom(scaleX: 0, scaleY: 0, x: 0, y: 0)