2013-08-29 22 views
0

我的viewcontroller只支持橫向取向。我在主視圖中添加了一個白色視圖(whiteView - IBOutlet,在xib中),並在白視圖中添加了藍色CALayer(blueLayer - 類中的屬性)。當我在這個視圖控制器上運行hitTest時,它會在應用程序窗口右側的觸摸上返回不正確的結果,一切正常工作在左側。就好像該應用程序正在以縱向模式運行,即使當前方向是橫向。在縱向模式下一切正常。CALayer :: 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]; 
} 

回答

1

它與方向無關。 根據蘋果文檔,「hitTest返回圖層的最遠的後代」。 兄弟姐妹按照從上到下的順序進行搜索。觸點位於接收器超級層的座標系中。 因此,在獲得touchPoint後立即添加此行。即

CGPoint touchPoint = [[touches anyObject] locationInView:self.view]; 
touchPoint = [self.view.layer convertPoint:touchPoint toLayer:self.view.layer.superlayer]; 
...........