我正在尝试为按钮设置动画。当我这样做时(使用button.layer addAnimation),该按钮将被禁用。动画时有没有办法让用户互动?我还尝试使用传递UIViewAnimationOptionAllowUserInteraction选项的animateWithDuration包装块中的所有内容,但它仍然不起作用。
编辑:这很奇怪。如果我点击上角(我放置按钮的位置),它会触发事件。这几乎就像按钮的框架不跟随动画一样。编辑:我最终做的是创建一个事件,每隔0.1秒触发一次,将button.frame设置为[[button.layer presentationLayer] frame]。这似乎可以解决问题。
答案 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;