메소드에서 반환하지 않고 코어 플롯을 새로 고치는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1230030

문제

코어 플롯을 사용하는 코코아 인터페이스가 있습니다. 인터페이스에서 버튼을 누르면 플롯이 그려집니다. 나는 그 사이의 수면 to sleep ()와 함께 플로팅 방법을 여러 번 호출하여 일련의 그래프를 만들고 싶었습니다. 그러나 데이터를 다시로드하는 호출은 함수가 종료 될 때까지 아무 일도 일어나지 않는 것으로 보입니다 (마지막 그래프 만 표시). 이제 나는 cpanimation이 존재한다는 것을 알고 있지만 사용을 시작하기 전에 기능이 종료되어 그래프를 새로 고치게 할 때 어떤 일이 발생하는지 궁금했습니다. 수면을 사용하는 대신 상쾌한 것을 관리하는 실에 양보해야합니까?

도움이 되었습니까?

해결책

알았어, 나는 어떻게 알아 냈다. 별도의 스레드의 메소드에서 ReloadData 메소드를 호출했습니다 (항상 반환). 이것은 IBACTION에서 ReloadData를 호출하는 것과 NSTIMER와 함께 요약했습니다. 마지막으로 수면을 사용하는 대신 NSConditionLock을 사용하여 처리 및 새로 고침을 조정합니다.

다른 팁

아마도 코어 플롯 (또는 코드)은보기를 필요한 디스플레이로 설정합니다. 그것은 즉시 일어나지 않습니다. 이벤트 루프로 돌아올 때 발생합니다.

당신이 사용할 때마다 sleep Mac OS X 응용 프로그램에서는 강아지를 죽입니다. 대신 Nstimer를 사용하십시오. 타이머 콜백 메소드가 하나의 그래프에 필요한 작업을 수행하고 메소드가 그려야 할 그래프를 알기 위해 필요한 인스턴스 변수를 설정하여 메소드가 실행될 때까지 각 그래프를 차례로 그립니다.

또는 더 나은 방법은 사용자가 모든 그래프를 슬라이드 쇼로 시청하는 대신 사용자가 선택할 수있는 그래프 목록을 제시하십시오. (명시 적으로 표지 된 슬라이드 쇼가 당신이 구현하는 것이 아니라면.)

대부분의 코코아 드로잉 프레임 워크와 마찬가지로 코어 플롯은 게으른다 : 런 루프 반복의 끝에 그려진다. 이것은 물건이 너무 자주 그려지지 않도록하기위한 것입니다.

층은 즉시 그리기보다는 드로잉이 필요한 것으로 표시됩니다.

다른 사람들이 지적한 바와 같이, 수면에 대한 더 나은 접근 방식은 Nstimer를 사용하여 런 루프를 차단하지 않거나 PerformSelector : WithObject : AfterDelay와 같은 NSObject 메소드를 사용하는 것입니다.

Peter는 제대로되어 있습니다. 다시로드 데이터 방법은 실제로 아무것도 그릴 수 없습니다. 플롯은 다음에 레이어가 화면에 그려 질 때 디스플레이가 필요한 것으로 표시되고 새로 고침됩니다. 사용하는 경우 sleep, 결코 그릴 기회를 얻지 못합니다.

또한 핵심 플롯은 상당히 젊은 프로젝트입니다. CPAnimation 그리고 관련 클래스는 스터브입니다. 그들은 아직 아무것도하지 않습니다. :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top