18

我的目标是保持与 UIPopoverController 相同的坐标,只需更改箭头偏移量。所以基本上我有三个按钮触摸它们中的每一个都会显示一个弹出窗口。呈现此弹出框时,它会更改屏幕上的位置,但我不希望那样。为了更清楚地查看屏幕截图:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

15

对于我的弹出框,我希望箭头位于左上角而不是顶部居中(这是默认设置)。

popoverLayoutMargins通过设置UIPopoverController的属性,我设法得到了下面的结果(截图) 。您可以使用它来减少 UIPopoverController 内部计算中使用的屏幕区域,以确定在何处显示弹出框。

UIPopovercontroller 左侧箭头

编码:

// 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];

我认为您可以通过调整上述内容来获得所需的结果。

于 2012-09-17T07:57:30.090 回答
1

您不能使用 Apple 的内置 UIPopoverViewController 类按原样执行此操作。但是实现自己的弹出视图控制器应该是相当简单和合乎逻辑的(只是一些非常基本的 2D 几何图形和一些在 UIView 的文档中的挖掘)。

于 2012-07-05T05:59:18.817 回答
1

是的,你可以这么做。您必须创建一个 alpha=0.0f 的辅助视图,并使用它来引导箭头。

例如:

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

好的,现在您使用该视图作为箭头指南打开弹出框。

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

现在你只需要移动视图:

auxView.frame = secondButton.frame;

如果您愿意,可以使用该动作的动画。

还有一件事,对于这种箭头到按钮,我更喜欢箭头接触按钮。您可以使用:

presentPopoverFromRect:CGRectInset(auxView.bounds, 4.0, 4.0)
于 2012-07-05T06:09:24.340 回答