2013-02-21 5 views
0

Я рисую несколько цветов, перетаскивая пальцы в приложение для iPhone, но когда я минимизирую приложение, а затем максимизирую, я теряю весь свой чертеж, так как он называет drawrect. Я не знаю, откуда этот метод вызывается, но я не вижу никакого решения этой проблемы. В основном это происходит, когда я запускаю много приложений на устройстве. Я думаю, что iOS удаляет все данные в буфере, чтобы предотвратить низкую производительность iPhone. Каково решение этой проблемы? И почему он теряет рисунок? Пожалуйста помоги! Я не нашел решения этой проблемы.Потеря всех чертежей, когда приложение выходит на передний план

ответ

0

Рамка будет вызывать drawRect по мере необходимости, это ваша ответственность, чтобы нарисовать вид, когда он вызывается. Вы должны хранить любое состояние, которое вам нужно, от действий пользователей, чтобы перерисовать представление при вызове drawRect.

1

Поскольку ваш вид выгружен в фоновом режиме, и когда вы вернетесь на передний план, вид будет отложен, поэтому он будет перерисовываться.

Когда вы вводите фон, если память устройства низкая, Apple выгрузит представление приложения фона (даже закрыть ваше приложение), чтобы увеличить память для текущего запущенного приложения. Ваше представление будет выгружено, когда вы вернетесь на передний план, представление будет откликаться на «данные», поэтому убедитесь, что вы не держите «данные» в представлении.

А может быть, в iOS6, Apple модифицировать механизм

1

Я теряю весь мой рисунок, как он называет DrawRect метод.

Ваш вопрос, кажется, как будто вы не рисовать в методе DrawRect, метод DrawRect вызывается каждый раз, когда ваш взгляд обновляется/загружен. Поэтому при вводе из фона вызывается метод drawrect. Если вы не обрабатываете механизм рисования методом drawrect, вы теряете все данные.

Apple States that

по умолчанию реализация этого метода ничего не делает. Подклассы , которые используют собственные технологии рисования (такие как Core Graphics и UIKit) , чтобы нарисовать содержимое своего представления, должны переопределить этот метод и реализовать их код чертежа. Вам не нужно переопределять этот метод, если ваше представление устанавливает его содержимое другими способами. Например, вам не нужно , чтобы переопределить этот метод, если в вашем представлении отображается только фоновый цвет , или если ваше представление устанавливает его содержимое напрямую, используя нижний слой . Аналогично, вы не должны переопределять этот метод, если ваш вид использует OpenGL ES для выполнения его чертежа.

Если вы обращаетесь с этим другим способом, тогда вам необходимо обработать его после того, как ваше представление будет нарисовано в viewwillAppear.

Иначе может быть причина памяти, так как если вы получаете предупреждение о памяти, ViewDidLoad вызывается там, где вы обычно инициализируете данные.

Смежные вопросы