Обрезать часть контроллера просмотра

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

  1. TableviewContoller с 10 ячейками

  2. ImageWiderContoller с большим изображением и другими элементами управления.

Первая ячейка таблицы должна иметь полукруг, через который должен быть виден ImageWiderContoller (который находится ниже TableviewContoller).


person Manoj    schedule 18.05.2015    source источник
comment
Мой ответ здесь, вероятно, то, что вы ищете   -  person Lefteris    schedule 18.05.2015
comment
ViewController, на который нажат или представлен другой viewController, не может быть виден под предыдущим. Чтобы проверить, просто установите фон представленного представления viewController на чистый.   -  person ZeMoon    schedule 18.05.2015
comment
Это неверно @ZeMoon, потому что, если ViewController представлен модально, вы можете установить UIModalPresentationStyle на OverCurrentContext, и предыдущее представление viewController будет видно.   -  person Lefteris    schedule 18.05.2015
comment
@Lefteris О, это было представлено в iOS 8. Приятно слышать!   -  person ZeMoon    schedule 18.05.2015
comment
Вы можете использовать контейнерный контроллер представления для этого вместо обрезки.   -  person Mukesh    schedule 18.05.2015


Ответы (1)


Единственный способ, которым я думаю сделать это, - это иметь собственный UIView и установить его как вид по умолчанию для вашего самого верхнего UIViewController. Внутри этого метода UIView's drawRect() вы можете рисовать любые фигуры (включая прозрачные). Например, если вы хотите нарисовать прозрачный круг в середине вашего контроллера, вы должны сделать это в drawRect() вашего UIView:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    [[UIColor orangeColor] setFill]; //background Fill
    CGContextFillRect(context, self.bounds);

    [[UIColor clearColor] setFill]; //circle Fill.
    CGContextFillEllipseInRect(context, (CGRect){self.center.x - 25.0f, self.center.y - 25.0f, 50.0f, 50.0f});
}

В initWithFrame: того же UIView добавьте следующее:

[self setBackgroundColor:[UIColor clearColor]];

PS: Как уже упоминалось @Lefteris, очевидно, установите для UIViewController UIModalPresentationStyle значение OverCurrentContext, чтобы оно отображалось над тем же контроллером.

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

person Sabir Ali    schedule 18.05.2015
comment
Спасибо за ваш ответ @Сабир Али. Я отредактировал свой вопрос, чтобы объяснить мою настоящую потребность - person Manoj; 19.05.2015
comment
Вы можете использовать тот же подход drawRec:, настроив класс UITableViewCell и поместив туда эту функцию drawRect:. Затем вы можете использовать этот настроенный UITableViewCell для первой ячейки вашей таблицы и ячейки по умолчанию для остальных. Учитывая ваш обновленный вопрос, он должен работать нормально. (PS: если я все еще вас неправильно понимаю, поделитесь макетом желаемой настройки, и я буду рад помочь) - person Sabir Ali; 19.05.2015
comment
Точно такая же идея, которую я реализовал, но я искал что-то другое, кроме этого. Но я бы отказался от одного за ваш ответ. - person Manoj; 19.05.2015
comment
Спасибо @Manoj, если вы имеете в виду, что ищете другой подход для того же результата, мне было бы интересно узнать о вашей находке :) - person Sabir Ali; 19.05.2015
comment
Я уверен, что @Sabir Ali я обновлю один раз, когда у меня появится новая идея для моей задачи. - person Manoj; 20.05.2015