2010-06-03 2 views
0

Есть ли способ уйти от drawRect: без обновления тока UIView? Например:Rollback drawRect:

- (void)drawRect:(CGRect)rect { 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextSetLineWidth(context, 2); 

CGContextMoveToPoint(context, 10.0, 30.0); 
CGContextAddLineToPoint(context, 310.0, 30.0); 
CGContextStrokePath(context); 


//I would like to return from here and rollback all changes in drawRect: 

} 

Спасибо!

+0

Нет, вы не можете. Если вы объясните, почему вы хотите это сделать, возможно, кто-то может предложить альтернативное решение. –

+0

Это приложение карты. Когда пользователь перемещает карту, новый поток (назовем этот поток1) начинает перерисовывать экран. Затем пользователь снова перемещает карту, и теперь thread2 (самый новый поток) должен перерисовать карту. Но если thread1 не закончил чертеж, экран будет «плоть» изображения потока1 на мгновение. Поэтому лучше откат метода drawRect: thread1 и рисовать только изображение thread2. – fic

+1

Звучит странно. Вы не можете перерисовать экран более чем на 50 кадров в секунду. Время, затрачиваемое на вытяжку, должно быть менее 1/50 секунд для того, чтобы gui мог реагировать. Если ваш рисунок занимает больше времени, это звучит так, как будто вам нужно рисовать текстуру в фоновом потоке, а когда она готова, выкладывайте ее на экран в drawrect (что займет гораздо меньше 1/50 секунд). Затем ваш вопрос заключается в том, как отменить фоновый поток и запустить новый. – hooleyhoop

ответ

0

Если вы еще не начали рисовать в контексте, можно было бы просто вернуться с drawRect:. Вам нужно было бы установить свойство clearsContextBeforeDrawing представления NO.

После начала рисования в контексте, вид/слой всегда будет обновлять его содержимое.

+0

Спасибо за ответ. – fic