如何在动画期间启用按钮

时间:2012-11-11 17:36:19

标签: iphone objective-c ios ipad animation

我正在使用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"];

我需要在移动时使用按钮。 此外,我尝试使用触摸检测,但它只在停止时使用按钮。 可能吗? 感谢。

1 个答案:

答案 0 :(得分: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;
        }
    }
}