CABasicAnimationで移動している時の座標

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;
}


 

できないかと思って・・・ちょっとドキドキした。。。
動かすのとかはすごーく便利が故に、細かいところ押さえないとあせる例。

Leave a Comment