Saya mencoba meniru latar belakang buram ini dari layar contoh iOS 7 yang dirilis Apple:
Pertanyaan ini menyarankan menerapkan filter CI untuk konten di bawah ini, tetapi itu pendekatan yang sama sekali berbeda. Jelas bahwa iOS 7 tidak menangkap konten tampilan di bawah ini, karena berbagai alasan:
- Melakukan beberapa pengujian kasar, menangkap tangkapan layar tampilan di bawah dan menerapkan filter CIGaussianBlur dengan radius yang cukup besar untuk meniru gaya blur iOS 7 membutuhkan waktu 1-2 detik, bahkan pada simulator.
- Tampilan blur iOS 7 mampu mengaburkan tampilan dinamis, seperti video atau animasi, tanpa jeda yang terlihat.
Adakah yang bisa membuat hipotesis kerangka kerja apa yang bisa mereka gunakan untuk membuat efek ini, dan jika mungkin untuk membuat efek yang sama dengan API publik saat ini?
Edit: (dari komentar) Kami tidak tahu persis bagaimana Apple melakukannya, tetapi adakah asumsi dasar yang dapat kami buat? Kita dapat berasumsi mereka menggunakan perangkat keras, bukan?
Apakah efek mandiri di setiap tampilan, sehingga efeknya tidak benar-benar tahu apa yang ada di baliknya? Atau haruskah, berdasarkan cara kerja blur, konten di balik blur dipertimbangkan?
Jika konten di balik efek tersebut relevan, dapatkah kita berasumsi bahwa Apple menerima "umpan" dari konten di bawah ini dan terus-menerus menjadikannya kabur?
sumber
Jawaban:
Mengapa repot mereplikasi efeknya? Cukup gambarkan UIToolbar di belakang tampilan Anda.
sumber
frame
atautransform
dari toolbar ini / view atau sesuatu seperti itu, atau hal-hal buruk akan terjadi. Dia juga sangat menyarankan untuk mengajukan laporan bug Radar tentang ini, untuk membangun sebuah kasus secara internal sehingga kita bisa mendapatkan API publik nyata untuk efek ini!UITabBar
sendiri.Apple merilis kode di WWDC sebagai kategori di UIImage yang mencakup fungsi ini, jika Anda memiliki akun pengembang, Anda dapat mengambil kategori UIImage (dan kode contoh lainnya) dengan masuk ke tautan ini: https://developer.apple. com / wwdc / schedule / dan browsing untuk bagian 226 dan mengklik detail. Saya belum bermain-main dengannya tapi saya pikir efeknya akan jauh lebih lambat di iOS 6, ada beberapa peningkatan untuk iOS 7 yang membuat menyambar screen shot awal yang digunakan sebagai input untuk blur jauh lebih cepat.
Tautan langsung: https://developer.apple.com/downloads/download.action?path=wwdc_2013/wwdc_2013_sample_code/ios_uiimageeffects.zip
sumber
Sebenarnya saya berani bertaruh ini akan lebih mudah untuk dicapai. Mungkin tidak akan beroperasi atau terlihat persis seperti apa yang terjadi Apple tetapi bisa sangat dekat.
Pertama-tama, Anda harus menentukan CGRect dari UIView yang akan Anda presentasikan. Setelah Anda menentukan bahwa Anda hanya perlu mengambil gambar dari bagian UI sehingga dapat kabur. Sesuatu seperti ini...
Gaussian Blur - Direkomendasikan
Menggunakan
UIImage+ImageEffects
Kategori Apple yang disediakan di sini , Anda akan mendapatkan gaussian blur yang sangat mirip dengan blur di iOS 7.Box Blur
Anda juga bisa menggunakan blur kotak menggunakan
boxBlurImageWithBlur:
kategori UIImage berikut . Ini didasarkan pada algorythem yang dapat Anda temukan di sini .Sekarang Anda menghitung area layar menjadi buram, meneruskannya ke kategori kabur dan menerima kembali UIImage yang telah buram, sekarang yang tersisa adalah mengatur gambar buram itu sebagai latar belakang tampilan yang akan Anda sajikan. Seperti yang saya katakan, ini tidak akan menjadi pasangan yang sempurna untuk apa yang dilakukan Apple, tetapi tetap terlihat keren.
Semoga ini bisa membantu.
sumber
renderInContext
, gunakan yang barudrawViewHierarchyInRect:
atausnapshotView:
. WWDC talk 216 "Implementing Engaging UI di iOS7" mengklaim peningkatan kinerja 5-15x.iOS8 menjawab pertanyaan-pertanyaan ini.
- (instancetype)initWithEffect:(UIVisualEffect *)effect
atau Swift:
init(effect effect: UIVisualEffect)
sumber
Saya baru saja menulis subkelas kecil saya dari UIView yang memiliki kemampuan untuk menghasilkan iOS 7 blur asli pada tampilan kustom apa pun. Ini menggunakan UIToolbar tetapi dengan cara yang aman untuk mengubah bingkai, batas, warna dan alfa dengan animasi real-time.
Tolong beri tahu saya jika Anda melihat ada masalah.
https://github.com/ivoleko/ILTranslucentView
sumber
Ada desas-desus bahwa insinyur Apple mengklaim, untuk membuat pemain ini mereka membaca langsung dari buffer gpu yang menimbulkan masalah keamanan yang mengapa belum ada API publik untuk melakukan ini.
sumber
Ini adalah solusi yang dapat Anda lihat di vidios WWDC. Anda harus melakukan Gaussian Blur, jadi hal pertama yang harus Anda lakukan adalah menambahkan file .m dan .h baru dengan kode yang saya tulis di sini, kemudian Anda harus membuat dan menembak layar, menggunakan efek yang diinginkan dan tambahkan ke tampilan Anda, lalu UITable UIView Anda atau apa pun yang harus transparan, Anda dapat bermain dengan applyBlurWithRadius, untuk mengarsipkan efek yang diinginkan, panggilan ini berfungsi dengan UIImage apa pun.
Pada akhirnya gambar yang buram akan menjadi latar belakang dan sisa kontrol di atas harus transparan.
Agar ini berfungsi, Anda harus menambahkan perpustakaan berikutnya:
Acelerate.framework, UIKit.framework, CoreGraphics.framework
Saya harap Anda menyukainya.
Selamat coding.
sumber
Anda dapat menemukan solusi dari DEMO apel di halaman ini: WWDC 2013 , cari tahu dan unduh kode sampel UIImageEffects.
Kemudian dengan kode @Jeremy Fox. Saya mengubahnya menjadi
Semoga ini bisa membantu Anda.
sumber
Ini adalah cara yang sangat mudah untuk melakukannya: https://github.com/JagCesar/iOS-blur
Cukup salin lapisan UIToolbar dan Anda selesai, AMBlurView melakukannya untuk Anda. Oke, ini tidak buram seperti pusat kontrol, tapi cukup buram.
Ingat bahwa iOS7 berada di bawah NDA.sumber
Setiap respons di sini menggunakan vImageBoxConvolve_ARGB8888 fungsi ini benar-benar lambat, itu baik, jika kinerjanya bukan persyaratan prioritas tinggi, tetapi jika Anda menggunakan ini untuk transisi antara dua Pengontrol Tampilan (misalnya) pendekatan ini berarti lebih dari 1 kali. kedua atau mungkin lebih, itu sangat buruk bagi pengalaman pengguna aplikasi Anda.
Jika Anda lebih suka menyerahkan semua pemrosesan gambar ini ke GPU (Dan Anda seharusnya), Anda bisa mendapatkan efek yang jauh lebih baik dan juga waktu yang luar biasa membulatkan 50ms (seandainya Anda memiliki waktu 1 detik dalam pendekatan pertama), jadi, mari kita lakukan .
Pertama-tama unduh GPUImage Framework (BSD Licensed) di sini .
Selanjutnya, Tambahkan kelas berikut (.m dan .h) dari GPUImage (Saya tidak yakin bahwa ini adalah minimum yang diperlukan untuk efek blur saja)
GPUImageTwoPassTextureSamplingFilter
iOS / GPUImage-Prefix.pch
Selanjutnya, buat kategori di UIImage, yang akan menambahkan efek blur ke UIImage yang ada:
Dan terakhir, tambahkan kerangka kerja berikut untuk proyek Anda:
AVFoundation CoreMedia CoreVideo OpenGLES
Ya, bersenang-senang dengan pendekatan yang jauh lebih cepat ini;)
sumber
Anda dapat mencoba menggunakan tampilan kustom saya, yang memiliki kemampuan untuk mengaburkan latar belakang. Ia melakukan ini dengan memalsukan mengambil potret latar belakang dan mengaburkannya, seperti yang ada dalam kode WWDC Apple. Sangat mudah digunakan.
Saya juga membuat beberapa perbaikan untuk memalsukan kekaburan dinamis tanpa kehilangan kinerja. Latar belakang tampilan saya adalah scrollView yang menggulir dengan tampilan, sehingga memberikan efek blur untuk sisa superview.
Lihat contoh dan kode di GitHub saya
sumber
Core Background mengimplementasikan efek iOS 7 yang diinginkan.
https://github.com/justinmfischer/core-background
Penafian: Saya adalah penulis proyek ini
sumber