Bir CGPoint'i UIView'imden UIWindow koordinatlarına dönüştürmek ve UIApplication keyWindow'un her zaman sıfır olduğunu fark ettim; bu neden?UIApplication sharedApplication - keyWindow nil?
UIView'den convertPoint:toView:
yöntemini denedim.
Xcode (Görünüm uygulaması) bir şablonda görünüm denetleyicisi denedik bu örnek kod bakın:
- (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");
}
ve ben alıyorum:
p:{100, 100} np:{100, 100}
p:{100, 100} np:{140, 160}
p:{100, 100} np:{100, 100}
window was nil
ben ama sadece dönüştürebilirsiniz Pencereye uygulama temsilcisi aracılığıyla erişiyorum. Ve UIApplication değil. Belgelere göre, keyWindow burada çalışmalıdır, ancak sıfırdır. Bu neden?
Uygulamanız birden çok pencereye sahipse bu özellik yine de işe yarayacak mı? Örneğin, belge tabanlı bir uygulamada ne var? –
Yani [UIApplication sharedApplication] .keyWindow – Laszlo
@ Laszlo Bu aynı şey değil. Biri, penceresini uygulama temsilcisinden alır; biri şu andan itibaren hangi pencereden olursa olabilir. – iwasrobbed