Quiero convertir un CGPoint de mi UIView a coordenadas UIWindow y me he dado cuenta de que UIApplication keyWindow es siempre nula; ¿Por qué es esto?UIApplication sharedApplication - keyWindow is nil?
He intentado el método convertPoint:toView:
de UIView.
Por favor, vea este código de ejemplo he intentado en el controlador de vista en una plantilla de Xcode (Ver solicitud):
- (void)viewDidLoad {
[super viewDidLoad];
UIView *test = [[UIView alloc] initWithFrame:CGRectMake(40,40,250,250)];
[test setBackgroundColor:[UIColor redColor]];
[self.view addSubview:test];
CGPoint p = CGPointMake(100, 100);
CGPoint np;
np = [test convertPoint:p toView:[[UIApplication sharedApplication] keyWindow]];
NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));
AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
np = [test convertPoint:p toView:[appDel window]];
NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));
np = [test convertPoint:p toView:nil];
NSLog(@"p:%@ np:%@", NSStringFromCGPoint(p), NSStringFromCGPoint(np));
[test release];
if(![[UIApplication sharedApplication] keyWindow])
NSLog(@"window was nil");
}
y me sale:
p:{100, 100} np:{100, 100}
p:{100, 100} np:{140, 160}
p:{100, 100} np:{100, 100}
window was nil
puedo convertirlo pero sólo cuando Accedo a la ventana a través del delegado de la aplicación. Y no UIApplication. De acuerdo con la documentación, keyWindow debería funcionar aquí, pero es nulo. ¿Por qué es esto?
¿Funcionará esto aún si su aplicación tiene varias ventanas? Me gusta, ¿qué tal en una aplicación basada en documentos? –
Te refieres a [UIApplication sharedApplication] .keyWindow – Laszlo
@Laszlo Eso no es lo mismo. Uno obtiene su ventana del delegado de la aplicación, uno de la ventana que esté en la parte superior en este momento. – iwasrobbed