CABasicAnimationで移動させているLayerとの衝突判定を行う場合、layer.frameだと移動前の位置が取得されてうまく動作しない。
この場合は、
[layer presentationLayer]
を利用して、アニメーションのlayerを取得してそのframeで判断すると・・・成功。
Viewを親にしたクラスの場合こんな感じ。
※ pointはタッチされた座標。
※marginは、多少ずれていてもHitとみなすため。
- (BOOL)isHit:(CGPoint)point { CALayer *tmp = [self.layer presentationLayer]; int margin = 6; if ((tmp.frame.origin.x - margin) <= point.x && point.x <= (tmp.frame.origin.x + tmp.frame.size.width + margin)) { if ((tmp.frame.origin.y - margin) <= point.y && point.y <= (tmp.frame.origin.y + tmp.frame.size.height + margin)) { return YES; } } return NO; }
できないかと思って・・・ちょっとドキドキした。。。
動かすのとかはすごーく便利が故に、細かいところ押さえないとあせる例。