为什么appDelegates窗口属性的原点始终为0?

时间:2014-03-17 07:40:46

标签: ios objective-c

我正在制作一个键盘以避开文本字段,我向上移动整个屏幕,使文本字段总是位于键盘上方。现在,如果键盘已经显示,并且我点击另一个文本字段,它应该将屏幕从当前位置向上移动到将显示下一个文本字段的新位置。

问题是,每当我读取appDelegate.window.origin时,它总是(0,0)在做动画后将它向上移动。因此,如果我想从当前的移位位置做一个新动画,我需要以某种方式跟踪自己。有没有理由为什么appDelegate.window的原点始终为0?是否有一个不同的变量我应该看一下而不是向上移动整个屏幕?

更新

所以我设法解决了我的问题,我的代码中的一个片段显示,如果你自己跟踪原点,你只需要在动画制作之前更新windows.frame,以便动画时原点是正确的开始。上一个问题仍然存在,原点总是0,0

似乎很奇怪
        __block CGRect frame = appDelegate.window.frame;

        //set the origin of the window to the previous shifted value
        if(UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])){
            frame.origin.y = appDelegate.currentWindowOriginShift;
        }
        else {
            frame.origin.x = appDelegate.currentWindowOriginShift;
        }

        appDelegate.window.frame = frame; //i was missing this before

        [UIView animateWithDuration:0.3 animations:^{

            if(UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])){
                frame.origin.y -= difference;
                appDelegate.currentWindowOriginShift = frame.origin.y;
            }
            else {
                frame.origin.x -= difference;
                appDelegate.currentWindowOriginShift = frame.origin.x;
            }
            appDelegate.window.frame = frame;
        }];

0 个答案:

没有答案