2010-11-02 6 views
0

Я бы хотел показать один и тот же UIView несколько раз. На данный момент у меня есть мой рисунок в основном UIView, а затем скопируйте его в изображение с помощью renderInContext: и UIGraphicsGetImageFromCurrentImageContext. Затем я устанавливаю содержимое других прокси-серверов UIViews этим изображением.Duplicate UIViews

UIGraphicsBeginImageContext(size); 

[self.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage * clonedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

return [clonedImage CGImage]; 

Я испытываю узкое место в renderInContext: вызов, предположительно потому, что он должен скопировать изображение представления. Я вижу горячие точки в resample_byte_h_3cpp и resample_byte_v_Ncpp, но я не уверен, что они делают.

Можно ли отображать один и тот же UIView несколько раз, чтобы уменьшить эти накладные расходы? Или есть более эффективный способ визуализации изображения?

+0

О каком UIView вы имеете в виду? – matheeeny

+0

Это потомок UIView с фоновым изображением и некоторыми наложениями CAShapeLayer. – Douglas

ответ

1

Как сделать копию UIImage вместо создания новых изображений снова и снова из UIView?

//.. Create the clonedImage from UIView 

CGImageRef cgImageRef = [clonedImage CGImage]; 
UIImage *twinImage = [[UIImage alloc] initWithCGImage:cgImageRef]; 

//.. Use the images 

[clonedImage release]; // if needed 
[twinImage release]; // if needed 
+0

Я обновляю исходный UIView, и мне бы хотелось увидеть эти обновления во всех прокси. Я могу просто мириться с незначительным отставанием в iPhone 3G для этой версии (около 100-200 мс) и перезаписать этот бит приложения, используя OpenGL в будущем. Он работает отлично, как на iPad. – Douglas

+0

Хорошо, тогда вы должны проверить Grand Central Dispatch. Он позволяет настраивать очереди и запускать код в пакетах, в зависимости от того, когда будет выполнен определенный код. Он также будет работать в фоновом режиме, который не ищет приложение и/или его интерфейс. – runmad