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

Представить UIPopoverController в том же положении с изменением смещения только стрелки

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

enter image description here

enter image description here

enter image description here

4b9b3361

Ответ 1

Для моего popover мне нужно, чтобы стрелка была сверху слева, а не топ-центром (по умолчанию).

Мне удалось получить результат ниже (снимок экрана), установив свойство popoverLayoutMargins для UIPopoverController. Вы можете использовать его для уменьшения области экрана, используемой во внутренних вычислениях UIPopoverController, чтобы определить, где показывать popover.

UIPopovercontroller arrow on the left

Код:

// Get the location and size of the control (button that says "Drinks")
CGRect rect = control.frame;

// Set the width to 1, this will put the anchorpoint on the left side
// of the control
rect.size.width = 1;

// Reduce the available screen for the popover by creating a left margin
// The popover controller will assume that left side of the screen starts
// at rect.origin.x
popoverC.popoverLayoutMargins = UIEdgeInsetsMake(0, rect.origin.x, 0, 0);

// Simply present the popover (force arrow direction up)
[popoverC presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

Я думаю, что вы сможете получить желаемый результат, изменив приведенное выше.

Ответ 2

Вы не можете сделать это как есть с встроенным классом UIPopoverViewController от Apple. Но должно быть довольно просто и логично реализовать свой собственный контроллер popover view (только некоторые очень простые 2D-геометрии и немного копания в документах UIView).

Ответ 3

Да, вы можете это сделать. Вы должны создать aux-представление с альфа = 0.0f и использовать его для направления стрелки.

Например:

auxView = [[UIView alloc] initWithFrame:firstButton.frame];
auxView.alpha = 0.0 ;
auxView.userInteractionEnabled = NO;
[firstButton.superView addSubview:auxView];
[auxView release];

Хорошо, теперь вы открываете popover, используя этот вид в качестве руководства по стрелке.

[thePopoverController presentPopoverFromRect:auxView.bounds inView:auxView
            permitedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

Теперь вам нужно только переместить вид:

auxView.frame = secondButton.frame;

Используйте анимации для этого перемещения, если хотите.

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

presentPopoverFromRect:CGRectInset(auxView.bounds, 4.0, 4.0)