如何动态更改弹出窗口的坐标

时间:2013-06-03 11:23:07

标签: ios objective-c ipad uipopovercontroller popover

背景

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

问题

我面临的问题(在横向模式下)是当键盘显示时模态表单向上移动并且弹出窗口我的框架。因此弹出框保持在其原始位置(键盘显示之前)并且呈现的rect向上移动。 我应用的解决方案是从更改后的矩形中(using presentPopoverFromRect)表示-(void)didShowKeyBoard:(NSNotification*) notif中的弹出框,并在-(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];

但它不起作用。

有人可以指导我这样做的正确方法吗?
任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

这部分解决了我的问题。我用一个调度来延迟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]; 
});

当我的键盘被解除时,这可以正常工作,但是当显示键盘时,相同的片段无法提供所需的结果。

如果有人知道为什么会这样,请发表评论。谢谢!!