CAShapeLayer с UIRectCornerBottomLeft / Right делает мой взгляд исчезающим

ОК. Я выполнил поиск Google, поиск в стеке, поиск Wenderlich (это еще что-нибудь?). Я пробовал все здесь при переполнении, и ничего не работает.

Мне нужен эксперт CALayer.

У меня есть tableView, который я показываю как раскрывающийся список из верхней части моего приложения. Он показывает тонкий и денди, пока я не попытаюсь обогнуть нижние левые / правые углы. Каждая попытка, которую я пыталась сделать, привела к тому, что моя таблица полностью исчезла. Способы по-прежнему срабатывают, и я получаю доработки для методов вверх / вниз. Однако таблица просто исчезает.

Код с таблицей:

- (void)setupTopMenu { CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width; self.topMenuTable = [[UITableView alloc] initWithFrame:CGRectMake((screenWidth / 2) - ((screenWidth - topMenuSideBuffer) / 2), self.view.frame.origin.y + topBuffer, (screenWidth - topMenuSideBuffer), 0) style:UITableViewStylePlain]; self.topMenuTable.backgroundColor = DARK_BLUE_NAVBAR_COLOR; self.topMenuTable.dataSource = self; self.topMenuTable.delegate = self; self.topMenuTable.scrollEnabled = YES; self.topMenuTable.separatorStyle = UITableViewCellSeparatorStyleSingleLine; self.topMenuTable.separatorColor = [UIColor blackColor]; self.topMenuTable.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; self.topMenuTable.layer.borderColor = [UIColor blackColor].CGColor; self.topMenuTable.layer.borderWidth = 0.4f; UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:self.topMenuTable.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(5.0, 5.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.view.bounds; maskLayer.path = maskPath.CGPath; self.topMenuTable.layer.mask = maskLayer; [self.view addSubview:self.topMenuTable]; } 

Код с просто взглядом (я подумал, может быть, это как-то связано с tableView, но оно ведет себя одинаково, когда я использую обычный UIView)

 - (void)setupTopMenu { CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width; self.topMenuView = [[UIView alloc] initWithFrame:CGRectMake((screenWidth / 2) - ((screenWidth - topMenuSideBuffer) / 2), self.view.frame.origin.y + topBuffer, (screenWidth - topMenuSideBuffer), 0)]; self.topMenuView.backgroundColor = [UIColor redColor]; self.topMenuView.layer.borderColor = [UIColor blackColor].CGColor; self.topMenuView.layer.borderWidth = 0.4f; UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:self.topMenuView.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(5.0, 5.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.view.bounds; maskLayer.path = maskPath.CGPath; self.topMenuView.layer.mask = maskLayer; [self.view addSubview:self.topMenuView]; } 

Код, который я использую, чтобы показать вид (ы):

 - (void)showTopMenu { if (!isTopMenuDown) { [UIView animateWithDuration:0.45 animations:^ { //self.topMenuTable.frame = CGRectMake((self.screenWidth / 2) - (self.topMenuWidth / 2), self.view.bounds.origin.y + topBuffer, self.topMenuWidth, self.topMenuHeight); self.topMenuView.frame = CGRectMake((self.screenWidth / 2) - (self.topMenuWidth / 2), self.view.bounds.origin.y + topBuffer, self.topMenuWidth, self.topMenuHeight); } completion:^(BOOL finished) { }]; } else { [UIView animateWithDuration:0.35 animations:^ { // self.topMenuTable.frame = CGRectMake((self.screenWidth / 2) - (self.topMenuWidth /2), self.view.bounds.origin.y + topBuffer, self.topMenuWidth, 0); self.topMenuView.frame = CGRectMake((self.screenWidth / 2) - (self.topMenuWidth /2), self.view.bounds.origin.y + topBuffer, self.topMenuWidth, 0); } completion:^ (BOOL finished) { }]; } isTopMenuDown =! isTopMenuDown; } 

ПРИМЕЧАНИЕ. Я также попытался добавить маску к слою, например, в нескольких углах UIView и вокруг границы слоя вида.

Тот же результат.

Если я вырву код Layer, представления будут отображаться отлично, но с помощью кода слоя они исчезнут.

Есть ли что-то в том, как я показываю представление, которое я не вижу, это заставляет его исчезнуть?

Спасибо за помощь.

  • UITableView ячейка с двойным щелчком должна перейти в предыдущее состояние
  • UITableView reloadData crash
  • Привязка UITableViewCell к модели данных (обновления, управляемые FetchedResultsController)
  • NSZombie - следует сохранять / освобождать звонки в паре с помощью библиотеки?
  • Показать местоположения в UITableview
  • Что такое вертикальный алфавит в названной телефонной книге iOS?
  • В чем смысл showReorderControl?
  • Swift, добавьте салфетки для удаления UITableViewCell
  • One Solution collect form web for “CAShapeLayer с UIRectCornerBottomLeft / Right делает мой взгляд исчезающим”

    Я подумал, может быть, это что-то связано с TableView, но оно ведет себя одинаково, когда я использую обычный UIView

    Точно так – потому что это не имеет ничего общего с табличным представлением. Это связано с тем, что вы не понимаете, что такое маска.

    Маскирующий слой блокирует части своего слоя в зависимости от прозрачности слоя маски. Вы ничего не сделали для выделения непрозрачных частей маски из прозрачных частей. Вся ваша маска прозрачна. Таким образом, весь слой – смысл, весь вид – заблокирован (невидим).

    Мне кажется, вы описываете что-то вроде этого (я преувеличивал округление углов, только для показа)

    введите описание изображения здесь

    Это прямоугольник с маской на нем. Маска состоит из заполненного закругленного прямоугольника. Таким образом, внутренность пути непрозрачна и появляется; внешний вид прозрачен и не появляется.

    Просто FYI, вот как я создал маску и добавил ее (я использовал изображение и contents , но вы, безусловно, можете использовать слой формы, если хотите):

     UIView* viewToMask = self.view.subviews[0]; UIGraphicsBeginImageContextWithOptions(viewToMask.bounds.size, NO, 0); UIBezierPath* round = [UIBezierPath bezierPathWithRoundedRect:viewToMask.bounds byRoundingCorners: (UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(50,50)]; [round fill]; UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CALayer* mask = [CALayer new]; mask.frame = viewToMask.bounds; mask.contents = (id)result.CGImage; viewToMask.layer.mask = mask; 
    Interesting Posts

    Apple VerificationController.m не удалось проверить подпись квитанции о покупке в виде песочницы

    Почему return return не останавливает программу?

    Как я могу найти устройство uuid для всех подключенных устройств с помощью сценария командной строки?

    Swift UIImageView, растянутый аспект

    Почему я получаю разрыв между моим UISearchBar и моим заголовком ячейки UITableView, когда я касаюсь UISearchBar на iOS7?

    как узнать, включено ли мое приложение в магазине приложений iTunes?

    iOS: доступ к аудиоустройству аппаратного аудиоустройства устройства

    подсветка анимации в объективе-c

    Как правильно настроить UIScrollView contentOffset

    iOS, объединяющий выходные данные для видеоданных и фотографий

    Почему CoreBluetooth снова обнаруживает одно и то же периферийное устройство, и снова, и снова?

    Фильтр даты PHFetchResults не создает правильные результаты для диапазона времени

    AVAudioSession управляет звуковым выходом

    Как показать Календарь вместо использования UIDatePicker в iPhone?

    dyld: библиотека не загружена: @ rpath / libswiftCore.dylib / Изображение не найдено

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.