在设备轮换时重新定位UIPopoverController

时间:2014-08-11 12:03:24

标签: cocoa-touch ios7 swift uipopovercontroller

我正在尝试在旋转设备时重新定位弹出窗口视图。我使用此代码创建popover:

        settingsViewCtrl = storyboard.instantiateViewControllerWithIdentifier("settingsViewCtrl") as SettingsViewCtrl;
        settingsPopoverCtrl = UIPopoverController(contentViewController: settingsViewCtrl);
        settingsPopoverCtrl.delegate = self;
        let m:CGFloat = min(view.frame.width, view.frame.height);
        let s:CGSize = CGSizeMake(m - 100, m - 100);
        let r:CGRect = CGRectMake(view.frame.width * 0.5, view.frame.height * 0.5, 1, 1);
        settingsPopoverCtrl.setPopoverContentSize(s, animated: true);
        settingsPopoverCtrl.presentPopoverFromRect(r, inView: view, permittedArrowDirections: nil, animated: true);

我在代表中使用willRepositionPopoverToRect ...

func popoverController(popoverController:UIPopoverController!, willRepositionPopoverToRect rect:UnsafeMutablePointer<CGRect>, inView view:AutoreleasingUnsafeMutablePointer<UIView?>)
{
    if (settingsPopoverCtrl != nil && settingsViewCtrl != nil)
    {
        let r:CGRect = CGRectMake(self.view.frame.width * 0.5, self.view.frame.height * 0.5, 1, 1);
        settingsPopoverCtrl.presentPopoverFromRect(r, inView: self.view, permittedArrowDirections: nil, animated: true);
    }
}

但那不可能是因为当我旋转设备时我收到了警告: 应用程序试图代表一个活跃的popover演示文稿: 并且popover也没有重新定位。

如何在willRepositionPopoverToRect中应用和更新定位CGRect,以便弹出视图更新?是否可以修改提供的rect:UnsafeMutablePointer<CGRect>并将其返回到弹出窗口?


更新

根据文档(https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverController%3awillRepositionPopoverToRect%3ainView%3a):

  

如果你想为popover建议一个不同的矩形,请将其设置为   此参数中的新值。

所以问题是:如何将新值放入此矩形?

1 个答案:

答案 0 :(得分:5)

让我回答一下:

        let r:CGRect = CGRectMake(self.view.frame.width * 0.5, self.view.frame.height * 0.5, 1, 1);
        rect.initialize(r);

...显然会使用新尺寸初始化给定的rect并且在更改设备旋转时它可以完美无缺,不像Apple的文档上的误导性代码,他们告诉我再次使用presentPopoverFromRect,这完全不起作用

相关问题