2010-12-07 3 views
0

iDraft 및 Penultimate와 같은 응용 프로그램에서는 지체없이 재실행 및 재실행을 매우 잘 수행합니다.Penultimate 및 iDraft와 같은 페인팅 응용 프로그램에서 실행 취소

많은 접근 방식을 시도했습니다. 현재, 내 테스트 애플 리케이션은 [NSData writeToFile : atomically :]을 사용하여 각 실행 취소 후에 파일에 직접 원시 픽셀 데이터를 쓰지만 0.6 초 지연되고 있습니다.

아무도 그것에 대한 힌트를 줄 수 있습니까?

+0

이 게시물에 대한 내 대답을 확인하십시오. http://stackoverflow.com/questions/4350715/iphone-trying-to-figure-out-the-drawrect/4350840#4350840 – Jaime

+0

각 후 파일 쓰기를해야합니까? 조작. 디스크에서 쓰기 및 읽기는 단순히 메모리에 액세스하는 것보다 훨씬 오래 걸립니다. 또한 사과 골라내는 시스템 프로파일 링 도구를 사용하는 것이 좋습니다. – Intentss

답변

1

iDraft 나 Penultimate를 모르지만 기회가있는 경우 사용자가 가지고있는 것보다 더 간단한 그리기 모델을 사용할 수 있습니다. 드로잉 앱을 작성할 때 두 가지 필수 드로잉 표현 중에서 선택할 수 있습니다. 즉, 원시 픽셀을 추적하거나 선, 원 등과 같은 드로잉 객체를 추적 할 수 있습니다. 즉, 픽셀과 벡터 표현 중에서 선택하십시오.

벡터를 사용하여 그리면 개별 픽셀을 추적하지 않습니다. 대신 주어진 너비, 색상 및 기타 매개 변수의 점 X와 Y 사이에 선이 있어야한다는 것을 알고 있습니다. 그런 표현을 할 때 Quartz를 호출하여 선을 그립니다. 이 경우 모델 (도면 표현)은 몇 개의 숫자로 구성되며 메모리가 거의 필요 없으므로 메모리에 여러 버전의 단일 도면을 포함 할 수 있으므로 신속하고 편리한 실행 취소 및 다시 실행이 가능합니다.

1

메모리에 실행 취소 스택을 유지하십시오. 모든 작업에 대해 디스크에 기록하지 마십시오. 비트 맵이나 벡터를 사용하는 경우 파일 조작은 사용자가 수행하는 모든 페인트 작업에 대한 중요한 경로에 있어서는 안됩니다.

데이터 모델이 전체 비트 맵인 경우 실행 취소/다시 실행을 위해 변경된 사각형 만 유지하십시오.

0

앞서 말했듯이, 전체 화면 필터를 실행 취소하려는 경우가 아니라면 모든 작업에 대해 디스크 기반의 경우에도 데이터를 디스크에 쓸 필요는 없습니다 사용자가 수행 한 브러시 스트로크의 경계 사각형 내에서

그리기 전에 이미지 사본을 보관할 수 있습니다. 즉, 사본에 그림을 그려 사용자 조작의 경계 사각형을 결정하고, 원본에서 적절한 데이터를 복사하고 유지할 수 있습니다 (크기 및 위치 포함). 정보). 실행 취소하면 복사하여 수정 된 영역에 붙여 넣습니다.

이 방법은 다시 실행하기까지 확장됩니다. 실행 취소하면 덮어 쓰려는 영역을 가져 와서 저장하십시오.