CAKeyframeAnimation与CABasicAnimation下的对象都不能接收touch事件,如果你想做点击的话,只能自己在self.view(即添加btn的父视图)上面做了,具体的,给self.view添加一个UITapGestureRecognizer,然后在里面去hitTest:-(void)click:(UITapGestureRecognizer *)gesture{
    CGPoint touchPoint = [gesture locationInView:self.view];
    if ([self.button.layer.presentationLayer hitTest:touchPoint]) {
        self.view.backgroundColor = self.view.backgroundColor == [UIColor yellowColor] ? [UIColor redColor] : [UIColor yellowColor];
    }
}

解决方案 »

  1.   

    我找了相关的资料  说是   因为btn的 frame并没有移动  
    所以我现在想尝试 下   让这个 btn的  frame  围绕着  UIBezierPath  不知道这样应该怎么实现。
      

  2.   

    不管你怎么移动,CoreAnimation的一个核心就是虽然看起来btn的frame在持续改变(在动画中),但是其frame的设置是立即改变的,比如你把一个button从0,0移动到200,200,在这种情况下:
    1.如果你使用的是显式动画(就像你现在用的CAKeyframeAnimation),是通过指定path来进行动画的,它的frame并没有改变,点击范围还是0,0这里
    2.如果你使用的是隐式动画,是通过设置frame来进行动画的,那么它的点击范围就是200,200这里
      

  3.   

    如果你想实现点击动画中的btn,得通过我上面给你代码,用hitTest+presentationLayer来实现
      

  4.   


    copy,还需要注意一个就是   btn的  userinterfaceenable 需要设置为false  这样才能使tap的触发让self.view 获取
      

  5.   


    copy,还需要注意一个就是   btn的  userinterfaceenable 需要设置为false  这样才能使tap的触发让self.view 获取
    userInteraction可以不用设置为false,这个主要看场景,为true的话可以照常接受btn的点击事件,只不过是在btn的frame范围内
      

  6.   

    我在self.view 上面家了一个  UIImageView,然后在UIImageView上面加了一个UIButton
      UIImageView添加了  tap事件,尝试了下  UIButton userinterfaceenable  一定要设置为NO ,否则不行。至于直接加载self.view上面没有尝试。
      

  7.   

    http://www.999dh.net/home.php?mod=space&uid=1&do=blog&id=410   写在这里的  做下记录
      

  8.   

    给CAKeyframeAnimation 再添加两个属性试试CAKeyframeAnimation *orbit = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    orbit.path = path.CGPath;
    orbit.duration = 16;
    orbit.repeatCount = HUGE_VALF;
    /////new add 
    orbit.removedOnCompletion = NO;
    orbit.fillMode= kCAFillModeForwards;
      

  9.   

    是的  你的  new add里面的代码  我网上查到了  已经放到代码里面了的。