У меня есть UIViewController
представление как подпредставление / модал поверх другого UIViewController
представления, например, что подпредставление / модал должно быть прозрачным, и все компоненты, добавленные в подпредставление, должны быть видимыми. Проблема в том, что у меня есть подпредставление показывает черный фон вместо того, чтобы иметь clearColor. Я пытаюсь сделать UIView
как clearColor не черный фон. Кто-нибудь знает, что с ним не так? Любое предложение приветствуется.
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];
}
РЕШЕНО : Я исправил проблемы. Это работает так хорошо для iPhone и iPad. Модальный View Controller без черного фона просто прозрачный / прозрачный. Единственное, что мне нужно изменить, я заменил UIModalPresentationFullScreen
на UIModalPresentationCurrentContext
. Как это просто!
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];
ВНИМАНИЕ: Если вы используете modalPresentationStyle
свойство 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];
ЗАМЕЧАНИЕ. Плохая новость заключается в том, что вышеуказанное решение не работает на iOS 7. Хорошая новость заключается в том, что я исправил проблему с iOS7! Я попросил кого-то о помощи, и вот что он сказал:
Представляя контроллер представления модально, iOS удаляет контроллеры представления под ним из иерархии представления на время, которое это представлено. Хотя вид вашего модально представленного контроллера представления прозрачен, под ним нет ничего, кроме окна приложения, которое является черным. iOS 7 представила новый модальный стиль представления UIModalPresentationCustom
, который заставляет iOS не удалять представления под представленным контроллером представления. Однако, чтобы использовать этот модальный стиль презентации, вы должны предоставить свой собственный делегат перехода для обработки презентации и отклонения анимации. Это изложено в докладе «Пользовательские переходы с использованием контроллеров представления» из WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218, в котором также описывается, как реализовать свой собственный делегат перехода.
Вы можете увидеть мое решение для указанной выше проблемы в iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
источник
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
решит проблему,Ответы:
iOS8 +
В iOS8 + теперь вы можете использовать новый modalPresentationStyle UIModalPresentationOverCurrentContext, чтобы представить контроллер представления с прозрачным фоном:
источник
[self presentViewController:modalViewController animated:YES completion:nil];
? (вместо targetController)?РЕШЕНО : Я исправил проблемы. Это работает так хорошо для iPhone и iPad. Модальный View Controller без черного фона просто прозрачный / прозрачный. Единственное, что мне нужно изменить - я заменил UIModalPresentationFullScreen на UIModalPresentationCurrentContext. Как это просто!
FirstViewController.m
ЗАМЕЧАНИЕ. Если вы используете свойство modalPresentationStyle для navigationController:
FirstViewController.m
ЗАМЕЧАНИЕ. Плохая новость заключается в том, что вышеуказанное решение не работает на iOS 7. Хорошая новость заключается в том, что я исправил проблему с iOS7! Я попросил кого-то о помощи, и вот что он сказал:
Представляя контроллер представления модально, iOS удаляет контроллеры представления под ним из иерархии представления на время, которое это представлено. Хотя вид вашего модально представленного контроллера представления прозрачен, под ним нет ничего, кроме окна приложения, которое является черным. iOS 7 представила новый модальный стиль представления, UIModalPresentationCustom, который заставляет iOS не удалять представления под представленным контроллером представления. Однако, чтобы использовать этот модальный стиль презентации, вы должны предоставить свой собственный делегат перехода для обработки презентации и отклонения анимации. Это изложено в докладе «Пользовательские переходы с использованием контроллеров представления» из WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218, в котором также описывается, как реализовать свой собственный делегат перехода.
Вы можете увидеть мое решение для указанной выше проблемы в iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
источник
self.modalPresentationStyle = UIModalPresentationCurrentContext;
сделал это.self.modalPresentationStyle = UIModalPresentationFullScreen; [self performSegueWithIdentifier:@"CustomSegue" sender:self];
Так что для чисто визуальных мыслителей и любителей раскадровки вы можете сделать:
1. Представление View Controller
2. Представлен вид контроллера
источник
Решение Swift 3 и iOS10:
источник
Это из xCode 7 beta 4, использующей Seg для управления перетаскиванием. Просто установите фон вашего места назначения, чтобы очистить, и установите свойства перехода в IB следующим образом (примечание. Презентация также может быть «на весь экран»):
источник
Я обнаружил, что самый простой способ заставить его работать на iOS7 и iOS8 - это добавить установить presentationStyle в UIModalPresentationOverCurrentContext на modallyPresentedVC (ViewController, который вы хотите представить модально) из-за iOS8:
и UIModalPresentationCurrentContext для представления VC (контроллер, который представляет modallyPresented) из-за iOS7:
Потому что вещи обрабатываются по-разному на iOS7 и iOS8. Конечно, вам не нужно устанавливать свойства navigationController, если вы его не используете. Надеюсь, это поможет.
источник
Версия Swift2:
источник
Другой способ (не нужно создавать собственные переходы и работает на iOS 7)
Использование раскадровки:
Создайте дочерний контроллер вида со свободным размером, установите ширину вида 500x500 (например) и добавьте следующий метод:
Затем создайте модальный переход с помощью Form Sheet и протестируйте его.
источник
Решение для iOS 7 с пользовательским интерфейсом:
Решение на основе высокотехнологичного кода.
источник
Для меня это работает:
MMPushNotificationViewController
является контроллером прозрачного вида, а также я сделалMMPushNotificationViewController
цвет представления прозрачным. Теперь все, что я сделал и сделал моим Transparentview-контроллером.источник
Для iOS7
Теперь есть способ добиться этого с помощью пользовательских переходов iOS7, например:
Чтобы создать свой собственный переход, вам нужно 2 вещи:
<UIViewControllerTransitionDelegate>
)<UIViewControllerAnimatedTransitioning>
)Вы можете найти больше информации о пользовательских переходах в этом руководстве .
источник
Отлично работает на iOS7 и iOS8
источник
Вы также можете повторно добавить окно к представлению.
И таким образом, представление может быть анимированным.
источник
Для iOS 7 и только с помощью Interface Builder это можно сделать, установив Presentation в «Over Current Context» на всех контроллерах представления, участвующих в модальной презентации. Даже для навигационных контроллеров.
Например, установите его на всех этих контроллерах представления:
NavController -> RootViewController -> ModalViewController
источник
Я не слишком много играл с Storyboard / Interface Builder, но что мне бросается в глаза, это то, что вы говорите, что изображение прозрачное (т. Е. 100% альфа / прозрачность), а также говорите, что оно непрозрачное ( 0% альфа - полностью твердое вещество). Эти две вещи, кажется, не мешают. Я бы закомментировал
self.view.opaque = YES;
строку и посмотрел, работает ли она тогда;)Ах, еще кое-что, о чем я только что подумал - вполне возможно, что ваш контроллер вида имеет альфа-фон, но, конечно, альфа будет отображаться до цвета основного окна или корневого контроллера программы, который по умолчанию черный. Самый базовый слой всего вашего приложения не может иметь прозрачный фон - прозрачный для чего? Что за этим стоит? Там должно быть что-то, чтобы увидеть через прозрачность. Имеет ли это смысл?
источник
Просто используйте "self.modalPresentationStyle = UIModalPresentationCurrentContext;", в представлении представления
Будет работать нормально :)
источник