CAAnimation - 禁用用户输入

时间:2011-08-28 14:55:59

标签: iphone objective-c xcode animation

我正在尝试为按钮设置动画。当我这样做时(使用button.layer addAnimation),该按钮将被禁用。动画时有没有办法让用户互动?我还尝试使用传递UIViewAnimationOptionAllowUserInteraction选项的animateWithDuration包装块中的所有内容,但它仍然不起作用。

编辑:这很奇怪。如果我点击上角(我放置按钮的位置),它会触发事件。这几乎就像按钮的框架不跟随动画一样。

编辑:我最终做的是创建一个事件,每隔0.1秒触发一次,将button.frame设置为[[button.layer presentationLayer] frame]。这似乎可以解决问题。

5 个答案:

答案 0 :(得分:1)

在UIViewAnimationOptions参数中使用以下UIView方法和UIViewAnimationOptionAllowUserInteraction:

+(void)animateWithDuration:(NSTimeInterval)持续时间延迟:(NSTimeInterval)延迟选项:(UIViewAnimationOptions)选项动画:(void(^)(void))动画完成:(void(^)(BOOL完成))完成

答案 1 :(得分:0)

我最终做的是创建一个每0.1秒触发一次的事件,将button.frame设置为等于button.layer

答案 2 :(得分:0)

对我而言,事件似乎有点 hacky 但是,你提到[[button.layer presentationLayer] frame]让我走上正轨: - )

因此,通过将手势识别器附加到移动视图的超视图,我可以进行以下检测:

CGPoint tapLocation = [gestureRecognizer locationInView:self.view];

for (UIView* childView in self.view.subviews)
{
    CGRect frame = [[childView.layer presentationLayer] frame];
    if (CGRectContainsPoint(frame, tapLocation))
    {
        ....
    }
}

答案 3 :(得分:0)

我希望按钮可以放大。所以我在开始动画之前缩小图层:

layer.transform = CATransform3DScale (layer.transform, 0.01, 0.01, 0.01);

// some animation code

动画完成后我将其缩放。

// some animation code
CATransform3D endingScale = CATransform3DScale (layer.transform, 100, 100, 100);
// some animation code

[layer addAnimation:animation forKey:@"transform"];

layer.transform = endingScale;

如果您直接将其分配给图层,框架将会更改。但是,使用动画不会改变帧。

答案 4 :(得分:0)

最佳解决方案是在调用动画后更改图层的位置:

[button.layer addAnimation:animation forKey:@"animation"];

 button.layer.position = endPosition;