2013-02-21 2 views
0

iPhone 앱에서 손가락을 드래그하여 여러 색상으로 그림을 그리지 만 앱을 최소화하고 최대화하면 드로어 메서드를 호출하므로 모든 그림이 손실됩니다. 이 메소드가 어디에서 호출되는지는 모르지만이 문제에 대한 해결책을 찾을 수는 없습니다. 주로 기기에서 많은 앱을 실행하면 주로 발생합니다. 나는 iOS가 iPhone의 낮은 성능을 방지하기 위해 버퍼의 모든 데이터를 삭제한다고 생각합니다. 이 문제에 대한 해결책은 무엇입니까? 왜 그림을 잃어 버리는거야? 도와주세요! 이 문제의 해결책을 찾지 못했습니다.앱이 포어 그라운드에있을 때 모든 그림을 잃음

답변

0

프레임 워크는 필요에 따라 drawRect를 호출하며 호출 될 때 뷰를 그리는 것은 사용자의 책임입니다. drawRect가 호출 될 때마다보기를 다시 그리기 위해 사용자 동작에서 필요한 상태를 저장해야합니다.

1

보기가 백그라운드에서 언로드되고 전경으로 돌아 왔을 때보기가 다시보기로 표시되므로 다시 그립니다.

배경을 입력 할 때 장치 메모리가 부족하면 Apple은 배경 응용 프로그램의보기를 언로드 (심지어 응용 프로그램 닫기)하여 현재 실행중인 응용 프로그램의 메모리를 확장합니다. 보기가 언로드되고 전경으로 되돌아 가면보기가 "데이터"로 다시 작성되므로보기에 "데이터"가 들어 가지 않도록하십시오.

어쩌면 iOS6의에서

는, 애플은 메커니즘

1

의 drawRect 메소드를 호출로 내 모든 도면을 상실하고 수정합니다. 당신이 당신의 drawRect 방법에 그리기하지 않을 경우 귀하의 질문에서

, 그것은 보인다, 의 drawRect 방법은보기가로드/업데이트 될 때마다 호출된다. 그래서 배경에서 들어올 때 drawrect 메서드가 호출됩니다. 드로잉 메커니즘에서 drawrect 메서드로 처리하지 않으면 모든 데이터가 손실됩니다.

Apple States that

이 메소드의 디폴트 구현은 아무것도하지 않습니다. 고유 한 드로잉 기술 (예 : Core Graphics 및 UIKit) 을 사용하여 뷰의 내용을 그리는 서브 클래스 은이 메서드를 재정의하고 드로잉 코드를 구현해야합니다. 보기가 다른 방식으로 내용을 설정하면이 방법을 재정의 할 필요가 없습니다. 예를 들어, 뷰가 배경색 만 표시하거나 뷰가 기본 레이어 객체를 사용하여 직접 내용을 설정하는 경우이 메서드를 재정의하려면 이 필요하지 않습니다. 마찬가지로보기 이 OpenGL ES를 사용하여 그 그림을 그리는 경우이 방법을 재정의해서는 안됩니다.

다른 방법으로 처리하는 경우보기를 ViewwillAppear에서 그려야합니다.

그렇지 않으면 메모리 경고가 발생하므로 일반적으로 데이터를 초기화하는 곳에서 ViewDidLoad가 호출되기 때문에 메모리 원인이있을 수 있습니다.

관련 문제