Ключевые позиции окна - "вдвое большая" причудливая проблема
Если вы хотите переместить UIView из одного представления в другое (скажем, "передача" UIView через переход), это прекрасно работает...
-(void)takeover:(UIView*)peel
{
// transfer "ownership" of a view from wherever it is now, to self.
// keep the position correct.
CGPoint centerInWC = [peel.superview convertPoint:peel.center toView:nil];
[self addSubview:peel];
CGPoint centerInMyViewCoords = [self convertPoint:centerInWC fromView:nil];
peel.center = centerInMyViewCoords;
}
(Примечание из документации для toView: и fromView:... "If view is nil, this method instead converts to window base coordinates."
)
Вот вывод..
2014-07-07 19:59:04.273 before .... actual position ... {87, 107}
2014-07-07 19:59:04.278 centerInWC is ... {87, 107}
2014-07-07 19:59:04.278 centerInMyViewCoords is ... {87, 107}
Нет проблем. Все фантастически.
Как насчет использования главного окна, так что keyWindow??
Теперь, вы ДУМАЕТЕ, что следующее также будет работать:
-(void)takeover:(UIView*)peel
{
//let's try using "main window" coords...
UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow];
CGPoint cWC = [mainWindow convertPoint:peel.center fromView:peel.superview];
[self addSubview:peel];
CGPoint c = [self convertPoint:cWC fromView:mainWindow];
peel.center = c;
}
На самом деле это не работает!
Каждый раз вы получаете значения, которые составляют половину фактических, правильных значений.
Вот вывод...
2014-07-07 19:59:04.273 before .... actual position ... {87, 107}
2014-07-07 19:59:04.278 cWC is ... {43.5, 53.5}
2014-07-07 19:59:04.278 c is ... {43.5, 53.5}
Кто-нибудь знает объяснение? Приветствия...