2013-10-14 47 views
0

我正在使用CALayer在iOS中在myView中添加了一個子圖層,並嘗試通過觸摸來獲取觸摸事件,但是我正在獲取觸摸事件,而不是在繪製該圖層的位置,請幫助我在糾正它時如果錯誤。未正確定位CALayer iOS

UIView *myView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
myView.backgroundColor = [UIColor whiteColor]; 

magicButton_ = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
magicButton_.frame = CGRectMake(10., 10., 300., 44.); 
[magicButton_ setTitle:@"Invoke Magic!" forState:UIControlStateNormal]; 
[magicButton_ addTarget:self action:@selector(toggleMoney:) forControlEvents:UIControlEventTouchUpInside]; 
[myView addSubview:magicButton_]; 

simpleLayer_ = [[CALayer alloc]init]; 


simpleLayer_.bounds = CGRectMake(0., 0., 150., 20.); 
simpleLayer_.position = CGPointMake((myView.center.x),(myView.center.y)); 
simpleLayer_.name = @"redlayer"; 
simpleLayer_.delegate = self; 
simpleLayer_.backgroundColor = [[UIColor redColor]CGColor]; 
[myView.layer addSublayer:simpleLayer_]; 
self.view = myView; 

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    CGPoint location = [[touches anyObject] locationInView:self.view]; 
    CALayer *hitLayer = [self.view.layer hitTest:[self.view convertPoint:location    fromView:nil]]; 

    NSLog(@"Location %f %f",location.x,location.y); 
    [self displayInfo:hitLayer.name]; 
} 


-(void)displayInfo:(NSString *)nameOfLayer 
{ 
    NSLog(@"%@",nameOfLayer); 
} 

2013-10-14 13:13:37.374 MyLayerProj[1750:11303] (null) 
2013-10-14 13:13:38.468 MyLayerProj[1750:11303] Location 87.000000 269.000000 
2013-10-14 13:13:38.469 MyLayerProj[1750:11303] (null) 
2013-10-14 13:13:39.239 MyLayerProj[1750:11303] Location 112.000000 278.000000 
2013-10-14 13:13:39.240 MyLayerProj[1750:11303] redlayer 
2013-10-14 13:13:40.479 MyLayerProj[1750:11303] Location 119.000000 278.000000 

我還包括我在運行代碼時得到的日誌。

+0

從我看到有人使用CGLayer已經很長時間了。我希望有一些有趣的,老派的Core Graphics hackery,但不幸的是你在談論CALayer(核心動畫):( –

回答

1

在調用-[CALayer hitTest]意思是「從窗口的座標空間變換locationself.view的座標空間」 [self.view convertPoint:location fromView:nil]

但是,location已經在視圖的座標空間中,因爲您是通過從self.view-[UITouch locationInView:]獲得的。

+0

那麼在我的情況下獲取位置的確切方式是什麼 – user2007454

+0

只是不要使用額外的' - [UIView convertPoint:fromView:]',即只有'CALayer * hitLayer = [self.view.layer hitTest:location];' – hatfinch

+0

仍然在邊界以外的點擊記錄 – user2007454