Duplikat UIView

Saya ingin menampilkan UIView yang sama beberapa kali. Saat ini, saya memiliki gambar saya di UIView utama, lalu menyalinnya ke dalam gambar menggunakan renderInContext: dan UIGraphicsGetImageFromCurrentImageContext. Lalu saya mengatur konten UIViews proxy lainnya menjadi gambar ini.

 UIGraphicsBeginImageContext(size);

 [self.layer renderInContext:UIGraphicsGetCurrentContext()];

 UIImage * clonedImage = UIGraphicsGetImageFromCurrentImageContext();

 UIGraphicsEndImageContext();

 return [clonedImage CGImage];

Saya mengalami hambatan dalam panggilan renderInContext:, mungkin karena harus menyalin gambar tampilan. Saya melihat hot spot di resample_byte_h_3cpp dan resample_byte_v_Ncpp, tapi saya tidak yakin apa fungsinya.

Apakah mungkin menampilkan UIView yang sama beberapa kali untuk mengurangi overhead ini? Atau adakah cara yang lebih efisien untuk merender gambar?


person Douglas    schedule 02.11.2010    source sumber
comment
UIView seperti apa yang Anda maksud?   -  person matheeeny    schedule 02.11.2010
comment
Ini adalah turunan UIView dengan gambar latar belakang dan beberapa overlay CAShapeLayer.   -  person Douglas    schedule 03.11.2010


Jawaban (1)


Bagaimana kalau membuat salinan UIImage alih-alih membuat gambar baru berulang kali dari 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
person runmad    schedule 03.11.2010
comment
Saya memperbarui UIView sumber, dan saya ingin melihat pembaruan tersebut di semua proxy. Saya mungkin akan menerima sedikit kelambatan pada iPhone 3G untuk rilis ini (sekitar 100-200 md) dan menulis ulang bagian aplikasi ini menggunakan OpenGL di masa mendatang. Ini berjalan dengan baik apa adanya di iPad. - person Douglas; 03.11.2010
comment
Oke, maka Anda harus memeriksa Grand Central Dispatch. Ini memungkinkan Anda mengatur antrian dan menjalankan kode secara batch, bergantung pada kapan kode tertentu selesai. Itu juga akan berjalan di latar belakang, yang tidak mencari aplikasi dan/atau UI-nya. - person runmad; 03.11.2010