2015-10-22 4 views
0

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

Что случилось, так это то, что я вижу черный фон в представленном виде, хотя его четкий цвет.

Я также прочитал здесь, и сделал точно так же: Display clearColor UIViewController over UIViewController

//to present  
PillView *pillv=[[PillView alloc]initWithPill:pill WithNum:num]; 
    pillv.delegate=self; 


    UIVisualEffect *blurEffect; 
    blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 

    UIVisualEffectView *visualEffectView; 
    visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
    visualEffectView.frame=CGRectMake(0, 0, self.view.frame.size.width, [Globals sharedGlobals].titleHeight*self.view.frame.size.height); 
    [self.view addSubview:visualEffectView]; 



    self.modalPresentationStyle = UIModalPresentationCurrentContext; 
    [self presentViewController:pillv animated:NO completion:nil]; 
+0

являются оу тестирования с тренажера или устройства? –

+0

симулятор, есть ли проблемы с ним? – Curnelious

+0

проверено также в устройстве не работает. – Curnelious

ответ

2

Вы должны добавить UIVisualEffectView предоставленному View Controller, а не один, что делает презентацию.

PillView *pillv=[[PillView alloc]initWithPill:pill WithNum:num]; 
    pillv.delegate=self; 


UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 

UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
visualEffectView.frame= pillv.view.bounds; 
pillv.view.backgroundColor = [UIColor clearColor]; 
[pillv.view insertSubview:visualEffectView atIndex:0]; 

self.modalPresentationStyle = UIModalPresentationOverCurrentContext; 
[self presentViewController:pillv animated:NO completion:nil]; 

И потому, что ОП, кажется, думает мое решение не работает, вот пример проекта, чтобы показать это:

https://dl.dropboxusercontent.com/u/29456419/blurTest.zip

А вот картины представления (представления) а затем OverlayView:

Presenting ViewControllerOverlay ViewController

+0

Я не думаю, что это то, что я есть находясь в поиске. я хотел бы, чтобы контроллер нижнего представления был размытым, где над ним находится таблетка. – Curnelious

+1

Разве это не создает эффект размытия на представленном виде? Я думаю, что OP попросил прозрачный вид !!! –

+0

, и он все еще не решает проблему прозрачного контроллера. потому что в вашем методе я не увижу нижний вид. – Curnelious

2

От Иос 8 и верхней, пожалуйста, используйте UIModalP resentationOverCurrentContext вместо UIModalPresentationCurrentContext

0

Используйте стиль UIModalPresentationOverCurrentContext для стиля презентации, если на iOS8 или выше.

Тем не менее, настройка ключа заключается в том, что вам необходимо установить definesPresentationContext в значение true для представляющего контроллера, который вы хотите видеть.

Из документации:

UIModalPresentationOverCurrentContext

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

При представлении контроллера вида в popover эта презентация поддерживается только в том случае, если стиль перехода UIModalTransitionStyleCoverVertical. Исключение составляет попытка использовать другой стиль перехода . Тем не менее, вы можете использовать другие стили перехода (за исключением частичного перехода курсора), если родительский контроллер не находится в popover.

Доступно в iOS 8.0 и новее.

Итак:

self.definesPresentationContext = true 
self.modalPresentationStyle = UIModalPresentationOverCurrentContext; 
[self presentViewController:pillv animated:NO completion:nil]; 
+0

Может быть' pillv.modalPresentationStyle = UIModalPresentationOverCurrentContext; '? –

+0

@ Cy-4AH Я думаю, что он должен быть установлен на контроллере, который определяет контекст для модального представления, а значит и сам. –