Подтвердить что ты не робот

Прозрачный ViewController, чтобы увидеть родителя ниже?

Я хотел бы добавить контроллер вида с прозрачным фоном, чтобы можно было увидеть контроллер родительского представления. (Это приложение для iPhone, а не для iPad.)

Я пробовал это:

TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];

Не повезло и дал контроллеру вида четкий цветной фон. Контроллер моего представления находится в раскадровке, если это что-то меняет.

Любая помощь в достижении этого была бы высоко оценена, спасибо.

4b9b3361

Ответ 1

@Джош Кахане установите контроллер вида, который будет представлять прозрачный контроллер представления с этим кодом в -ViewDidLoad и не забудьте установить альфа-канал в UIViewController View ниже 1.

код:

self.modalPresentationStyle = UIModalPresentationCurrentContext;

Ответ 2

Возможно, хотя есть несколько шагов, которые можно легко забыть. После того, как я боролся с собой, чтобы получить эту работу в течение 4 часов, я придумал следующее решение.

1 - создайте контроллер просмотра, как и любой другой.

Заголовочный файл

#import "DDBaseViewController.h"

@interface DDHomeSearchLoadingViewController : UIViewController

@end

Файл реализации

#import "DDHomeSearchLoadingViewController.h"

@interface DDHomeSearchLoadingViewController ()
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityMonitor;
@property (weak, nonatomic) IBOutlet UIView *modalView;

@end

@implementation DDHomeSearchLoadingViewController

#pragma mark - UIViewController lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];


    [self setupUI];
}

-(void) setupUI
{
    [self makeRoundedCorner:self.modalView AndCornerRadius:6.0f];
    [self.activityMonitor startAnimating];

}

-(void) makeRoundedCorner:(UIView*) view AndCornerRadius:(float) cornerRadius
{
    [view.layer setCornerRadius:cornerRadius];
    [view.layer setMasksToBounds:YES];
}

@end

2 - задайте цвет фона вашего контейнера как ClearColor

enter image description here

3 - Добавьте UIView, который будет представлен как наложение

enter image description here

4 - Добавьте UIView, который будет представлен как диалоговое окно над наложением UIView

При добавлении/перемещении убедитесь, что он находится за пределами оверлейного представления. По какой-то причине, когда вы перемещаете его с помощью мыши, он автоматически добавляет оверлей UIView. (Фрахт раздражает, если честно)

enter image description here

5 - Установите идентификатор раскадровки для созданного вами вида

enter image description here

6 - Наконец добавьте этот фрагмент кода везде, где вы его не назовете (предположим, что он тоже UiViewController)

DDHomeSearchLoadingViewController* ddHomeSearchLoadingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DDHomeSearchLoadingViewController"];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:ddHomeSearchLoadingViewController animated:YES completion:nil];

Я надеюсь, что это поможет вам, ребята,

Приветствия

Ответ 3

Я искал решение. Теперь благодаря iOS 8. Они представили пару новых modalPresentationStyle. один из них - UIModalPresentationOverCurrentContext. Используется для решения этой проблемы.

viewcontroller.modalPresentationStyle = UIModalPresentationOverCurrentContext;

Надеюсь, что это поможет.

Ответ 4

Для полноты и актуальности, я также добавляю решение для Swift:

либо

viewController.modalPresentationStyle = .CurrentContext 

be - стиль презентации, в котором содержимое отображается только над содержимым контроллера представления.

или

viewController.modalPresentationStyle = .OverCurrentContext

be - стиль презентации, в котором содержимое отображается только над содержимым контроллеров родительских представлений. Представления, находящиеся под представленным контентом, не удаляются из иерархии представлений, когда заканчивается презентация. Поэтому, если представленный контроллер представления не заполняет экран непрозрачным контентом, основное содержимое отображается через.

В зависимости от требований и условий презентации.

Ответ 5

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    ChooseController *sec=[story instantiateViewControllerWithIdentifier:@"Controller"];
    sec.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentViewController:sec animated:YES completion:^{

    }];

Примечание. Текущее значение альфа-контроля контроллера должно быть ниже 1, например, 0,5 альфа.

Ответ 6

Когда вы модно представляете контроллер вида, он переходит в стек, который, в свою очередь, скрывает контроллер представления под ним. Таким образом, все, что вы можете сделать, - это представить прозрачный вид с анимацией, похожий на то, что вы представляете контроллер представления.