создание черного прозрачного модального контроллера вида - PullRequest
4 голосов
/ 27 сентября 2011

Я хотел создать модальный контроллер вида с черным фоном, но я хочу сделать альфа равным 0,9, чтобы я все еще мог видеть вид позади него частично. Как мне это сделать? Я знаю, что могу использовать UIView, а затем просто добавить его в качестве подпредставления, однако, если у меня есть UINavigationController или UITabBarController, это не будет охватывать весь экран. В поисках некоторых предложений по этому вопросу, насколько я знаю, решения, которые я видел до сих пор, никогда не касались цветного фона ... большинству нужен только прозрачный фон.

Ответы [ 4 ]

6 голосов
/ 27 сентября 2011

Это поможет вам ...

Вы просто должны установить цвет фона в соответствии с вашими требованиями.

0 голосов
/ 23 апреля 2012

Я получил эту идею от https://gist.github.com/1279713

Подготовка: В модальном представлении xib (или сцене с использованием раскадровки) я настраиваю полноэкранный фоновый UIImageView (подключите его к файлу .h и присвойте ему свойство "backgroundImageView") с 0,3 альфа. И я установил цвет фона представления (UIView) как простой черный.

Идея: Затем в «viewDidLoad» модального контроллера представления я делаю снимок экрана из исходного состояния и устанавливаю это изображение в качестве фона UIImageView. Установите начальную точку Y на -480 и дайте ей сдвинуться до точки Y, используя длительность 0,4 секунды с опцией анимации EaseInOut. Когда мы отклоняем контроллер представления, просто делаем обратное.

Код для класса контроллера модального вида

.h файл:

@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView;
- (void) backgroundInitialize;
- (void) backgroundAnimateIn;
- (void) backgroundAnimateOut;

.m файл:

- (void) backgroundInitialize{
    UIGraphicsBeginImageContextWithOptions(((UIViewController *)delegate).view.window.frame.size, YES, 0.0);
    [((UIViewController *)delegate).view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    backgroundImageView.image=screenshot;
}
- (void) backgroundAnimateIn{
    CGRect backgroundImageViewRect = backgroundImageView.frame;
    CGRect backgroundImageViewRectTemp = backgroundImageViewRect;
    backgroundImageViewRectTemp.origin.y=-480;
    backgroundImageView.frame=backgroundImageViewRectTemp;

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        backgroundImageView.frame=backgroundImageViewRect;
    } completion:^(BOOL finished) {

    }];
}
- (void) backgroundAnimateOut{
    CGRect backgroundImageViewRect = backgroundImageView.frame;
    backgroundImageViewRect.origin.y-=480;

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        backgroundImageView.frame=backgroundImageViewRect;
    } completion:^(BOOL finished) {

    }];
}

В viewDidLoad просто позвоните:

[self backgroundInitialize];
[self backgroundAnimateIn];

В любом месте, где мы отклоняем модальный контроллер вида, мы вызываем:

[self backgroundAnimateOut];

Обратите внимание, что это ВСЕГДА анимирует фоновое изображение. Поэтому, если этот стиль перехода контроллера модального представления (или стиль перехода segue) не установлен на «Cover Vertical», вам может не понадобиться вызывать методы анимации.

0 голосов
/ 27 сентября 2011

Вы пробовали

[viewController1 presentModalViewController:viewController2 animated:YES];

Я сам не пробовал, но в документации сказано, что она всегда отображается в полноэкранном режиме.Затем просто установите его вид, чтобы иметь backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.9];.(белый = 0.0 - это черный).Добавьте любые подпредставления, которые вы хотите.Или установите цвет фона на полный черный, а альфа всего представления - 0,9.Это зависит от того, хотите ли вы, чтобы подпредставления были немного прозрачными.

0 голосов
/ 27 сентября 2011

Сначала добавьте UIImageView в ваш .h файл

UIImageView *overLayImage;

, а теперь добавьте нижеприведенный код в файл .m для viewDidLoad ()

overLayImage=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay1px.png"]] ;
overLayImage.frame = self.view.frame;
overLayImage.frame = CGRectMake(0, 0, 1024, 748);

Где "overlay1px.png" - этопрозрачное изображение на ваш выбор цвета с высотой и шириной 1px X 1px.

Теперь в вашем IBAction, где вы хотите добавить свой вид с прозрачным фоном, добавьте следующий код

[self.view addSubview:overLayImage];

[vwTermsCondition setFrame:CGRectMake(262, 300, 500, 120)];
[vwTermsCondition.layer setCornerRadius:5.0f];
[vwTermsCondition.layer setShadowColor:[UIColor blackColor]];
[vwTermsCondition.layer setMasksToBounds:YES];
[self.view addSubview:vwTermsCondition];

ВКод выше vwTermsCondtion - это название вашего представления.Это приложение для iPad, вы можете настроить высоту / ширину для iPhone.

Наслаждайтесь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...