将UIPopoverController放在同一位置,只更改箭头偏移量
我的目标是保持UIPopoverController相同的坐标只改变箭头偏移量。 所以基本上我有三个button触摸他们每个人显示一个popover。 当呈现这个popover它改变在屏幕上的位置,但我不想这样。 要更清楚地看看screenoshots:
对于我的popover,我希望箭头是左上angular,而不是顶端(这是默认)。
我设法通过设置popoverLayoutMargins
属性得到下面的结果(截图)。 您可以使用它来减less在UIPopoverController的内部计算中使用的屏幕区域,以确定在哪里显示popup窗口。
代码:
// 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)