用户交互启用了CAAnimation?(User Interaction Enabled With

2019-06-25 14:35发布

这是很容易让用户在使用基于块的动画的选项字段与动画互动的意见。 但在我的节目我使用的是CAKeyframeAnimation,我没有看到任何属性来设置启用用户交互。 有没有办法做到这一点?

谢谢,

编辑:这是实际的代码:

- (void)move
{
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, 50, 120);
    for (int i = 0; i < 5; i ++)
        CGPathAddLineToPoint(path, NULL, arc4random() % 320, arc4random() % 480);
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    [animation setPath:path];
    [animation setDuration:10];
    CFRelease(path);
    [self.layer addAnimation:animation forKey:@"move"];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self setAlpha:0];
}

Answer 1:

你最有可能接触到错误的地方。 当该层在屏幕上的动画值不会改变,因此视图实际上是定位在它是从一开始,而不是在其中显示在屏幕上。

我做了一个博客张贴几个月前就如何打测试动画层 。 它描述了你正在试图做的确切的事情。

您将需要添加的触摸操作(或手势识别)与上海华和做的命中测试presentationLayer自己来确定用户点击视图出现在屏幕上的位置。



Answer 2:

显然,预览解决方案不再适用于斯威夫特3.x和4.x版雨燕

我解决了这个问题,设置定时器来更新动画过程中框。

//Timer: To update the UI frame
    Timer.scheduledTimer(timeInterval: 0.15, target: self, selector: #selector(updateFrame), userInfo: nil, repeats: true)

//Timer Selector
@objc func updateFrame(){
   //getting the layer presentation bounds
    let layer = "button, label...".layer.presentation()!

    let point = CGPoint(x: layer.frame.origin.x, y: layer.frame.origin.y)
    let size = CGSize(width: layer.frame.width, height: layer.frame.height)
    // Update the UI element frame location
    "ui element".frame = CGRect(origin: point, size: size)
}


文章来源: User Interaction Enabled With CAAnimation?