如何动态更改气泡窗口的坐标

6

背景:

我需要从一个带有搜索框的imageview(而非barbutton)中显示一个popover,该popover需要从UIModalPresentationFormSheet中呈现。这已经成功实现了。

问题:

我所面临的问题(在横向模式下)是当键盘弹出时,模态表单表单会向上移动,并带着我的popover框架。因此,popover仍然停留在其原始位置(在显示键盘之前),并且呈现的框架被向上移动了。 我应用的解决方案是在-(void)didShowKeyBoard:(NSNotification*) notif 中通过改变的rect来表示(使用presentPopoverFromRect) 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];

但是它没有起作用。

请有人指导我正确的做法吗?
非常感谢任何帮助。


@Radu 在竖屏模式下,我没有遇到上述问题。在横屏模式下,就像我在问题中所述的那样,我从已经移动其位置的矩形中重新呈现它。然后弹出窗口会正确地假定移位后矩形的新位置。我面临的问题是它的过渡不够平滑。 - Prathamesh Saraf
我在其他地方遇到过这种问题。尝试将所有的转换代码放入UIView动画中 - 我曾经用这个技巧来实现一些键盘和表格动画,也许对你有用。 - Radu
谢谢你的建议,Radu,但我已经尝试过了,没有效果。我也尝试了块动画的方法。我甚至为过渡制作了一系列y坐标值的变化,但结果并不令人满意。我使用动画来延迟代码中的许多操作,但这是一个失败的地方,我不知道原因。 - Prathamesh Saraf
1
也许这会有帮助:http://stackoverflow.com/questions/5874146/close-uipopover-on-rotation-with-a-fadeout-animation。你可以尝试解除并重新显示弹出视图。 - Radu
1
同样的快速和弹性转换。它不够平滑。实际上,当我关闭键盘时,我已经让它变得平滑了。使用类似于以下方式的调度延迟: 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]; });当键盘显示时,同样的方法不起作用。 - Prathamesh Saraf
显示剩余4条评论
1个回答

1

好的,这在一定程度上解决了我的问题。我使用调度程序来延迟弹出窗口的显示。具体如下:

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

当我的键盘被解除时,此代码按要求运行,但是当键盘显示时,相同的代码片段无法提供所需的结果。如果有人知道为什么会这样,请留下评论。谢谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接