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

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

我在我的代表中使用了
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也没有重新定位。
如何在willrepositionpopopovertorect中应用和更新定位cgrect,以便popover视图更新?是否可以修改提供的willRepositionPopoverToRect并将其返回到弹出窗口?
更新:
根据文件(https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverController%3awillRepositionPopoverToRect%3ainView%3a):
如果要为Popover建议不同的矩形,请将
此参数中的新值。
所以问题是:如何将新值放入这个rect中?

最佳答案

我来回答这个问题:

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

…很明显,它会用新的维度初始化给定的rect,并且在改变设备旋转时,它可以毫无瑕疵地工作,而不像苹果文档中误导性的代码,它们告诉用户再次使用presentPopoverFromRect,这完全不起作用。

关于cocoa-touch - 在设备轮换时重新定位UIPopoverController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25242849/

10-08 23:11