Saya memiliki UIViewController
pandangan sebagai subview / modal di atas UIViewController
pandangan lain , seperti bahwa subview / modal harus transparan dan komponen apa pun yang ditambahkan ke subview harus terlihat. Masalahnya adalah yang saya miliki adalah subview menunjukkan latar belakang hitam sebagai gantinya memiliki clearColor. Saya mencoba menjadikan UIView
sebagai clearColor bukan latar belakang hitam. Adakah yang tahu apa yang salah dengannya? Setiap saran dihargai.
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
Diselesaikan : Saya memperbaiki masalah. Ini bekerja dengan baik untuk iPhone dan iPad. Pengendali Modal View tanpa latar belakang hitam hanya clearColor / transparan. Satu-satunya hal yang saya perlu perubahan adalah saya diganti UIModalPresentationFullScreen
untuk UIModalPresentationCurrentContext
. Betapa sederhananya itu!
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
PEMBERITAHUAN: Jika Anda menggunakan modalPresentationStyle
properti dari navigationController
:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
PEMBERITAHUAN: Berita buruknya adalah solusi di atas tidak berfungsi di iOS 7. Berita baiknya adalah saya memperbaiki masalah untuk iOS7! Saya meminta bantuan seseorang dan inilah yang dia katakan:
Saat menghadirkan pengontrol tampilan secara modial, iOS menghapus pengontrol tampilan di bawahnya dari hierarki tampilan selama durasi disajikan. Meskipun tampilan pengontrol tampilan yang disajikan secara transparan, tidak ada yang di bawahnya kecuali jendela aplikasi, yang berwarna hitam. iOS 7 memperkenalkan gaya presentasi modal baru UIModalPresentationCustom
,, yang menyebabkan iOS tidak menghapus tampilan di bawah pengontrol tampilan yang disajikan. Namun, untuk menggunakan gaya presentasi modal ini, Anda harus menyediakan delegasi transisi Anda sendiri untuk menangani presentasi dan memberhentikan animasi. Ini diuraikan dalam pembicaraan 'Transisi Ubahsuaian Menggunakan Pengontrol Tampilan' dari WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 yang juga mencakup cara menerapkan delegasi transisi Anda sendiri.
Anda dapat melihat solusi saya untuk masalah di atas di iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
sumber
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
akan memecahkan masalah ini,Jawaban:
iOS8 +
Di iOS8 + Anda sekarang dapat menggunakan modalPresentationStyle baru UIModalPresentationOverCurrentContext untuk menyajikan pengontrol tampilan dengan latar belakang transparan:
sumber
[self presentViewController:modalViewController animated:YES completion:nil];
? (bukan targetController)?Diselesaikan : Saya memperbaiki masalah. Ini bekerja dengan baik untuk iPhone dan iPad. Pengendali Modal View tanpa latar belakang hitam hanya clearColor / transparan. Satu-satunya hal yang perlu saya ubah adalah saya mengganti UIModalPresentationFullScreen ke UIModalPresentationCurrentContext. Betapa sederhananya itu!
FirstViewController.m
PEMBERITAHUAN: Jika Anda menggunakan properti modalPresentationStyle dari navigationController:
FirstViewController.m
PEMBERITAHUAN: Berita buruknya adalah solusi di atas tidak berfungsi di iOS 7. Berita baiknya adalah saya memperbaiki masalah untuk iOS7! Saya meminta bantuan seseorang dan inilah yang dia katakan:
Saat menghadirkan pengontrol tampilan secara modial, iOS menghapus pengontrol tampilan di bawahnya dari hierarki tampilan selama durasi disajikan. Meskipun tampilan pengontrol tampilan yang disajikan secara transparan, tidak ada yang di bawahnya kecuali jendela aplikasi, yang berwarna hitam. iOS 7 memperkenalkan gaya presentasi modal baru, UIModalPresentationCustom, yang menyebabkan iOS tidak menghapus tampilan di bawah pengontrol tampilan yang disajikan. Namun, untuk menggunakan gaya presentasi modal ini, Anda harus menyediakan delegasi transisi Anda sendiri untuk menangani presentasi dan memberhentikan animasi. Ini diuraikan dalam pembicaraan 'Transisi Ubahsuaian Menggunakan Pengontrol Tampilan' dari WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 yang juga mencakup cara menerapkan delegasi transisi Anda sendiri.
Anda dapat melihat solusi saya untuk masalah di atas di iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
sumber
self.modalPresentationStyle = UIModalPresentationCurrentContext;
melakukannya.self.modalPresentationStyle = UIModalPresentationFullScreen; [self performSegueWithIdentifier:@"CustomSegue" sender:self];
Jadi untuk pemikir visual murni dan penggemar storyboard, Anda dapat melakukan:
1. Menyajikan View Controller
2. Pengontrol Tampilan yang Disajikan
sumber
Solusi Swift 3 & iOS10:
sumber
Ini dari xCode 7 beta 4 menggunakan kontrol drag segue. Cukup setel latar belakang tujuan Anda untuk menghapus, dan atur properti segue di IB karena ini (nb. Presentasi juga bisa "Di Atas Layar Penuh"):
sumber
Saya menemukan cara termudah untuk membuatnya berfungsi di iOS7 dan iOS8 adalah dengan menambahkan set presentasentyle ke UIModalPresentationOverCurrentContext pada modallyPresentedVC (ViewController yang ingin Anda presentasikan secara digital) karena iOS8:
dan UIModalPresentationCurrentContext pada presentingVC (controller yang menyajikan modallyPresented) karena iOS7:
Karena semuanya ditangani secara berbeda pada iOS7 dan iOS8. Tentu saja Anda tidak perlu mengatur properti navigationController jika Anda tidak menggunakannya. Semoga itu bisa membantu.
sumber
Versi Swift2:
sumber
Cara lain (tidak perlu membuat transisi khusus dan berfungsi di iOS 7)
Menggunakan Storyboard:
Buat Pengendali Tampilan Anak dengan ukuran kebebasan, atur lebar tampilan menjadi 500x500 (misalnya) dan tambahkan metode selanjutnya:
Kemudian buat Segue Modal dengan Lembar Formulir dan mengujinya.
sumber
Solusi iOS 7 dengan segmen khusus:
Solusi berdasarkan kode hightech.
sumber
Bagi saya ini berfungsi:
MMPushNotificationViewController
adalah pengontrol Transparent View dan juga saya telah membuatMMPushNotificationViewController
warna tampilan sebagai clearcolor. Sekarang semua yang saya lakukan telah selesai dan membuat Transparentviewcontroller saya.sumber
Untuk iOS7
Sekarang ada cara untuk mencapai ini menggunakan transisi khusus iOS7, dengan cara ini:
Untuk membuat transisi khusus Anda, Anda perlu 2 hal:
<UIViewControllerTransitionDelegate>
)<UIViewControllerAnimatedTransitioning>
)Anda dapat menemukan lebih banyak informasi tentang transisi khusus dalam tutorial ini .
sumber
Berfungsi Luar Biasa di iOS7 dan iOS8
sumber
Anda juga dapat 'menambahkan kembali' jendela ke tampilan.
Dan dengan cara ini, presentasi dapat dianimasikan.
sumber
Untuk iOS 7 dan hanya dengan menggunakan Interface Builder, hal itu dapat dicapai dengan mengatur Presentasi ke "Over Current Context" pada semua pengontrol tampilan yang terlibat dalam presentasi modal. Bahkan untuk pengontrol navigasi.
Misalnya, atur di semua pengontrol tampilan ini:
NavController -> RootViewController -> ModalViewController
sumber
Saya belum pernah bermain-main dengan Storyboard / pembangun Antarmuka banyak, tapi apa yang muncul pada saya adalah bahwa Anda mengatakan tampilan berwarna jernih (mis. 100% alpha / tembus pandang) dan juga mengatakan itu buram ( 0% alpha - benar-benar solid). Kedua hal ini tampaknya tidak bertautan. Saya akan berkomentar
self.view.opaque = YES;
baris dan melihat apakah itu berfungsi;)Ah, sesuatu yang lain yang baru saja saya pikirkan - sangat mungkin pengontrol tampilan Anda TIDAK memiliki latar belakang alfa, tetapi tentu saja alfa akan menunjukkan warna jendela dasar atau pengontrol tampilan akar program, yang oleh hitam standar. Lapisan paling dasar dari seluruh aplikasi Anda tidak dapat memiliki latar belakang transparan - transparan untuk apa? Apa yang ada di baliknya? Pasti ada sesuatu untuk MELALUI transparansi. Apakah itu masuk akal?
sumber
Cukup gunakan "self.modalPresentationStyle = UIModalPresentationCurrentContext;", dalam menyajikan tampilan
Akan bekerja dengan baik :)
sumber