IOS 5 SetNeedsDisplayInRect вызывает FullScreen-Invalidity - PullRequest
2 голосов
/ 12 декабря 2011

Я заметил, что в IOS5 при первом вызове SetNeedsDisplayInRect устройство обновляется в полноэкранном режиме.это отличается от предыдущих версий IOS.

В приложении, над которым я работаю, у меня есть массив объектов, которые необходимо нарисовать (в основном прямоугольники с разными размерами линий).В случае, если я хочу перерисовать только несколько прямоугольников, я добавляю объекты в массив «Update» и вызываю SetNeedsDisplayInRect, чтобы сделать недействительной область прямоугольников.

внутри моего метода drawRect, который я определяю следующим образом:Нарисуйте полный массив объектов или просто «массив обновлений»:

BOOL boolDrawFullScreen = CGRectEqualToRect(rect, self.frame);

if (boolDrawFullScreen)
//draw all the objects
else
//draw just the objects within the update-array

это работало идеально, пока я не протестировал его с IOS5.На самом деле это все еще работает, но не в первый раз при вызове SetNeedsDisplayInRect: -> CGRectEqualToRect всегда возвращает yes.

почему это так ??что я делаю не так?

любые предложения высоко ценятся !!Спасибо

Том

1 Ответ

2 голосов
/ 09 марта 2012

Это поведение задокументировано здесь в QA1708 Улучшение производительности рисования изображений на iOS

Обратите внимание, что из-за того, как iPhone / iPod touch / iPad обновляет свой экран, весь вид будет перерисован, если вы вызовете -setNeedsDisplayInRect: или -setNeedsDisplay:.

Так что, похоже, вы захотите использовать подпредставление, если у вас есть экранная подпункт, который должен обновляться независимо от остальной части экрана.

...