views:

203

answers:

1

Hi, I want to convert a CGPoint from my UIView to UIWindow coordinates and have realized that UIApplication keyWindow is always nil, how come is this?

I have tried convertPoint:toView: method form UIView.

Please see this sample code I tried in the view controller in a template of Xcode (View application):

- (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");

}

and I get:

p:{100, 100} np:{100, 100}
p:{100, 100} np:{140, 160}
p:{100, 100} np:{100, 100}
window was nil

I can convert it but only when I access the window through the app delegate. And not UIApplication. According to docs, keyWindow should work here, but is nil. How come is this?

I wonder if somebody know why?

A: 

Sorry, my bad. This code was executed before [window makeKeyAndVisible]; (inside AppDelegate) So, no wonder why keyWindow was nil. lol.

nacho4d