将UIPopoverController放在同一位置,只更改箭头偏移量

我的目标是保持UIPopoverController相同的坐标只改变箭头偏移量。 所以基本上我有三个button触摸他们每个人显示一个popover。 当呈现这个popover它改变在屏幕上的位置,但我不想这样。 要更清楚地看看screenoshots:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

对于我的popover,我希望箭头是左上angular,而不是顶端(这是默认)。

我设法通过设置popoverLayoutMargins属性得到下面的结果(截图)。 您可以使用它来减less在UIPopoverController的内部计算中使用的屏幕区域,以确定在哪里显示popup窗口。

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

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

你不能像苹果公司内置的UIPopoverViewController类那样做。 但是实现你自己的popover视图控制器应该是相当简单和合乎逻辑的(只是一些非常基本的2D几何graphics和在UIView的文档中挖掘一点)。

是的,你可以这么做。 你必须创build一个辅助视图,alpha = 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; 

如果需要,可以使用该animation的animation。

还有一件事,对于这种button的箭头,我更喜欢箭头触摸button。 您可以使用:

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