0

我正在使用 CAKeyframeAnimation。

-(IBAction)start:(id)sender {

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(600, 150)];
    [path addLineToPoint:CGPointMake(600, 300)];
    [path addLineToPoint:CGPointMake(450, 300)];
    [path addLineToPoint:CGPointMake(450, 150)];
    [path addLineToPoint:CGPointMake(600, 150)];

    CAKeyframeAnimation *move = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    move.path = path.CGPath;
    move.duration = 6.0f;
    move.repeatCount = 100;

    [testButton.layer addAnimation:move forKey:@"move"];

我需要在按钮移动时使用它。我也尝试过使用触摸检测,但它在停止时只能与按钮一起使用。是否可以?谢谢。

4

1 回答 1

0

真的!您希望用户在制作动画时按下按钮?人们更喜欢在动画期间关闭交互。但无论如何,这是你的互动,那就这样吧。你有没有尝试过 -[yourButton setUserInteractionEnabled:TRUE];

通常在任何UIView动画中,我们只需简单地将UIViewAnimationOptionAllowUserInteraction其作为动画选项就可以了。由于您已经更深入地使用 CoreAnimation 和图层,因此不确定哪些选项可以使它在那里工作。请让我们知道它对您的效果如何...

更新:这个问题对我来说很有趣。所以我只是在 Xcode 中尝试一下。这是我发现的。要点击移动按钮,您需要在视图控制器中对按钮的.layer.presentationLayer属性(需要这个)进行点击测试。QuartzCore

在内部,动画只是养眼。动画滞后于视图的实际移动。动画开始时,按钮已经位于目标点。您只是看到视图/按钮移动的电影。如果您希望在动画期间可以点击按钮,则必须自己制作动画。

所以coe会是这样的——

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *t = [touches anyObject];
    CGPoint location = [t locationInView:self.view];
    for (UIButton *button in self.buttonsOutletCollection)
    {
        if ([button.layer.presentationLayer hitTest:location])
        {
            // This button was hit whilst moving - do something with it here
            break;
        }
    }
}
于 2012-11-11T17:53:34.267 回答