Saya bertanya-tanya bagaimana aplikasi iPhone saya dapat mengambil screenshot tertentu UIView
sebagai UIImage
.
Saya mencoba kode ini tetapi yang saya dapatkan hanyalah gambar kosong.
UIGraphicsBeginImageContext(CGSizeMake(320,480));
CGContextRef context = UIGraphicsGetCurrentContext();
[myUIView.layer drawInContext:context];
UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
myUIView
memiliki dimensi 320x480 dan memiliki beberapa sub-tampilan. Apa cara yang benar untuk melakukan ini?
ios
objective-c
uiview
screenshot
cduck
sumber
sumber
Jawaban:
Saya pikir Anda mungkin mau
renderInContext
, tidakdrawInContext
. drawInContext lebih merupakan metode yang Anda timpa ...Perhatikan bahwa ini mungkin tidak berfungsi di semua tampilan, khususnya setahun atau lebih yang lalu ketika saya mencoba menggunakan ini dengan tampilan kamera langsung, itu tidak berfungsi.
sumber
iOS 7 memiliki metode baru yang memungkinkan Anda untuk menarik hierarki tampilan ke dalam konteks grafik saat ini. Ini dapat digunakan untuk mendapatkan UIImage dengan sangat cepat.
Saya menerapkan metode kategori
UIView
untuk mendapatkan tampilan sebagaiUIImage
:Ini jauh lebih cepat daripada
renderInContext:
metode yang ada .Referensi: https://developer.apple.com/library/content/qa/qa1817/_index.html
PEMBARUAN UNTUK SWIFT : Ekstensi yang melakukan hal yang sama:
PEMBARUAN UNTUK SWIFT 3
sumber
Anda perlu menangkap jendela kunci untuk tangkapan layar atau UIView. Anda dapat melakukannya dalam Resolusi Retina menggunakan UIGraphicsBeginImageContextWithOptions dan mengatur parameter skalanya 0,0f. Selalu menangkap dalam resolusi asli (retina untuk iPhone 4 dan yang lebih baru).
Yang ini melakukan tangkapan layar layar penuh (jendela kunci)
Kode ini menangkap UIView dalam resolusi asli
Ini menyimpan UIImage dalam format jpg dengan kualitas 95% di folder dokumen aplikasi jika Anda perlu melakukannya.
sumber
iOS7 dan seterusnya, kami memiliki metode di bawah ini:
Memanggil metode di atas lebih cepat daripada mencoba merender isi tampilan saat ini menjadi gambar bitmap sendiri.
Jika Anda ingin menerapkan efek grafis, seperti blur, ke foto, gunakan
drawViewHierarchyInRect:afterScreenUpdates:
metode ini.https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html
sumber
Ada API baru dari iOS 10
sumber
Saya telah membuat ekstensi yang dapat digunakan untuk UIView untuk mengambil tangkapan layar di Swift:
Untuk menggunakannya cukup ketik:
sumber
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0);
daripadaUIGraphicsBeginImageContext(self.bounds.size);
menggunakan faktor skala yang tepat pada perangkat.drawViewHierarchyInRect
bukannyarenderInContext
tidak.Metode ini dapat dimasukkan ke dalam kelas Controller Anda.
sumber
drawRect
adalah tidak bagian dari UIViewController (IIRC). Itu adalah bagian dari UIView. Saya tidak percaya itu akan dipanggil jika ada di controller.Apple sekarang memungkinkan kita untuk menggunakannya dalam aplikasi publik, meskipun itu adalah API pribadi
sumber
Detail
Larutan
Pemakaian
Sampel lengkap
Hasil
sumber
Apple tidak mengizinkan:
Aplikasi harus mengambil tangkapan layar menggunakan
drawRect
metode seperti yang ditentukan dalam: http://developer.apple.com/library/ios/#qa/qa2010/qa1703.htmlsumber
Saya membuat ekstensi ini untuk menyimpan tangkapan layar dari UIView
hubungi :
Jika Anda ingin membuat png harus berubah:
oleh
sumber
Swift 4 diperbarui:
sumber
Cuplikan berikut digunakan untuk mengambil tangkapan layar:
Gunakan
renderInContext:
metode, bukandrawInContext:
metoderenderInContext:
metode menjadikan penerima dan sublapisannya dalam konteks saat ini. Metode ini dirender langsung dari pohon lapisan.sumber
sumber
Anda dapat menggunakan kategori UIView berikut -
sumber