2012-03-28 5 views
1

Ok. 나는 여기에서하려고하는 것과 비슷한 많은 주제들을 보았지만 꽤 일치하는 것은 아무것도 없다. 어쩌면 내 접근 방식은 근본적인 문제가 아닙니다. 여기 거래가 있습니다.drawRect : 및 UIPanGestureRecognizer를 사용한 부드러운 애니메이션

drawRect : 내 UIView 하위 클래스에 차트를 그립니다. 그런 다음 UIPanGestureRecognizer를 사용하여 차트의 오프셋 (뷰 계층 구조가 아닌 내부)을 오른쪽/왼쪽으로 변환합니다. 이것은 훌륭하게 작동하지만, 문제는 인식기의 동작이 상대적으로 낮은 빈도로 시작된다는 것입니다. 특히, 결과 패닝은 말하자면 스크롤 뷰 또는 테이블 뷰에서보다 훨씬 더 빠릅니다. 특히 내 차트의 점수가 올라갈 때. 지금 내가하고 싶은 것은 냄비 제스처의 동작에서 그림을 그려 내지는 않지만 팬이 현재 순간에 발사 한 순간부터 오프셋을 보간하여 초당 30 번 같은 식으로 타이머를 발사하도록하십시오. 그러나 점점 더 복잡해지고 있습니다.

누구나 제안이? UIScrollView로이 작업을 실제로 수행해야합니까? 내가 데이터를 어느 방향 으로든 멀리 확장 할 수 있기를 원하지 않는 이유는 전체 경로를 한 번에 그릴 필요가 없기 때문입니다. 표시됩니다. CAShapeLayer를 사용해야합니까? 나는 다른 일을하기 전에 이러한 가능성을 가지고 놀고 싶습니다 ...

모든 입력/경험은 가장 환영 할 것입니다.

+0

왜 당신이 패닝하는 동안'drawRect'가 호출되고 있습니까? 너는 단지 그 견해를 움직이지 않는가? –

+0

아니요, pan은 drawRect에 반영된 "dataWindow"를 수정합니다. 뷰 자체는 이동하거나 크기를 조정하지 않습니다. – samson

+0

아, 그럼 모든 스크롤 증가분마다 다시 그려 지나요? 그 일이 느려질 것입니다. 필자가 보았던 한 가지 트릭은 데이터를 이미지로 렌더링하고 새 데이터가 도착하면 데이터에서 다시 그리기 만하는 것입니다. 그렇지 않으면 이미지를 합성하는 것입니다. 또는 데이터 뷰를 scrollview에 넣고 다시 그리지 마십시오. 도착하면 솔루션을 게시하십시오. –

답변

1

그래서 결국, 나는 UIScrollView에 이러한 것들을 넣었습니다. 이 작업을 시작하기 위해서는 꽤 많은 작업을해야했습니다. 복잡한 부분은 일련의 PANES를 만드는 것이고 scrollview에 추가됩니다. 각 창은 그리기에 필요한 데이터를 대리인에게 요청하고 모두 함께 묶입니다. 다행히 차트 창을 포함하는 스크롤 뷰를 테이블 뷰에 넣으면 모든 것이 효과가있었습니다. 아직도 스케일링을 다루지는 않았지만, 여기에 비교적 사소한 게시물을 올려 놓았습니다.

그래서 원래의 질문에 대한 답입니다. 각각의 프레임을 팬하거나 그리지 마십시오. 고르지 않아 실제 해킹을 막을 수 있습니다. 부드럽게 찾을 수있는 좋은 방법이 없습니다. 보기를 멋지게 분리 할 수있는 한 스크롤보기가 이러한 모든 문제를 처리합니다. 하나의 긴 뷰를 사용할 수 있었지만 데이터 세트가 커지면 문제가 발생했습니다.

이제는 관련 문제가 있습니다. 오프 스크린 차트가 (UITableViewCells에있는)보기로 스크롤하면 새 차트가 그려지는 큰 문제가 있습니다. 비동기 적으로 이미지를 그려 볼 것이므로 새로운 행이 뷰로 스크롤 될 때 이미 이미지를 얻었을 것입니다.

+0

다행 이군요! –

+0

일부 코드를 게시하거나 조금 더 설명해 주시겠습니까? 나는 거의 같은 일을하고 있지만 현재 팬 제스처 인식기를 사용하여 위치를 변경하고 패닝이 발생할 때 경로를 수정하는 'CAShapeLayer'를 사용하고 있습니다. 모범 사례 일지 모르지만 원활하게 작동하는지 확인하십시오. 이제는 CGMutablePathRef를 변경하기가 어려워 새로운 최대 값을 찾으면 문제를 조정하는 방법이 있습니다. 그리고 다른 많은 문제가 있습니다. – Majster