我的viewcontroller仅支持横向。我在主视图中添加了一个白色视图(whiteView - 在IBI中的IBOutlet),并在whiteview中添加了一个蓝色的CALayer(blueLayer - 类中的属性)。当我在这个viewcontroller上运行hitTest时,它会在应用程序窗口右侧的触摸上返回错误的结果,左侧的一切正常。就好像应用程序以纵向模式运行,即使当前方向是横向。在肖像模式下一切正常。
以下是代码。在风景中,每次触摸右侧都会返回“在主视图中触摸”。我需要做些什么才能使其在景观中正常工作?
- (void)viewDidLoad
{
[super viewDidLoad];
self.blueLayer = [[CALayer alloc] init];
CGRect frame = self.whiteView.frame;
self.blueLayer.frame = CGRectMake(20.0, 20.0, frame.size.width-40.0, frame.size.height - 40.0f);
self.blueLayer.backgroundColor = [UIColor blueColor].CGColor;
[self.whiteView.layer addSublayer:self.blueLayer];
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Touch in main view" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
CALayer *touchedLayer = [self.view.layer hitTest:touchPoint];
if(touchedLayer == self.blueLayer){
alertView.message = @"Touch in blue view";
}
else if (touchedLayer == self.whiteView.layer){
alertView.message = @"Touch in white view";
}
else
alertView.message = @"Touch in main view";
[alertView show];
}
答案 0 :(得分:1)
它与方向无关。 根据apple docs,“hitTest返回层的最后代”。 兄弟姐妹按从上到下的顺序进行搜索。触摸点位于接收器超层的坐标系中。 因此,在获得touchPoint后立即添加此行。即
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
touchPoint = [self.view.layer convertPoint:touchPoint toLayer:self.view.layer.superlayer];
...........