Ios 如何在飞行中更改popover的坐标

Ios 如何在飞行中更改popover的坐标,ios,objective-c,ipad,uipopovercontroller,popover,Ios,Objective C,Ipad,Uipopovercontroller,Popover,背景: 我需要从具有搜索字段的imageview(rect而不是barbutton)显示一个popover。该popover需要从UIModalPresentationFormSheet显示。这已成功实现 问题: 我面临的问题(在横向模式下)是,当显示键盘时,模式表单表向上移动,我的弹出框随之向上移动。因此,弹出框保持在其原始位置(在显示键盘之前),显示的矩形向上移动。 我应用的解决方案是表示(使用presentPopoverFromRect)在-(void)didShowKeyBoard:(N

背景

我需要从具有搜索字段的imageview(rect而不是barbutton)显示一个popover。该popover需要从UIModalPresentationFormSheet显示。这已成功实现

问题

我面临的问题(在横向模式下)是,当显示键盘时,模式表单表向上移动,我的弹出框随之向上移动。因此,弹出框保持在其原始位置(在显示键盘之前),显示的矩形向上移动。 我应用的解决方案是表示
(使用presentPopoverFromRect)
-(void)didShowKeyBoard:(NSNotification*)notif
中来自更改的rect的popover,并在
-(void)didhideKeyBoard:(NSNotification*)notif
中执行相同的操作。这很好,但转换非常快速且有弹性。 那么,我如何才能实现这方面的平稳过渡呢

我尝试过的

我试过:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:5.0f];
[_statePopover presentPopoverFromRect:stateHandler.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
[UIView commitAnimations];
但它不起作用

有人能告诉我正确的方法吗?

非常感谢您的帮助。

这部分解决了我的问题。我使用调度来延迟popover演示。如下所示:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_USEC), dispatch_get_current_queue(), ^{
    [_statePopover presentPopoverFromRect:statehandler.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
});
当我的键盘被关闭,但当显示键盘时,同一个代码段无法提供所需的结果时,此功能按要求工作


如果有人知道为什么会这样,请留下评论。谢谢

你有没有试着根据方向改变府绸的坐标?@Radu在肖像中我没有面对上述问题。在风景中,正如我在问题中所说的,我从已经改变了位置的矩形中重新呈现它。popover然后正确地假定了移位矩形的新位置。我面临的问题是它的转换。它不是平滑的。我在其他地方遇到过这种问题,尝试将所有转换代码放入UIView动画中-我在一些键盘和表格动画中使用了这种技巧,也许它对你有用也许这会有所帮助。你可以试着用同样的快速和有弹性的过渡来关闭并重新显示Pop。这不是平稳的。事实上,当我关闭键盘时,它会变得平稳。通过类似这样的调度使用延迟:dispatch_after(dispatch_time(dispatch_time_NOW,NSEC_PER_USEC),dispatch_get_current_queue(),^{[\u statePopover presentpopoverfromfromrect:statephandler.frame inView:self.view permittedrowdirections:uipopoperrowwrowdirectionup动画:YES];});当显示键盘时,同样的事情不起作用。