2011-08-28 50 views
0

我正在尝试使按钮动起来。当我这样做时(使用button.layer addAnimation)该按钮被禁用。有什么方法可以在动画制作时允许用户互动?我还尝试使用animateWithDuration传递选项UIViewAnimationOptionAllowUserInteraction来包装块中的所有内容,但它仍然不起作用。CAAnimation - 禁用用户输入

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

编辑:我最终做的是创建一个事件,每0.1秒触发设置button.frame等于[[button.layer presentationLayer]帧]。这似乎是诀窍。

回答

0

我落得这样做是创造每0.1秒设置button.frame等于button.layer触发一个事件

+0

最好的解决方案是在调用动画后更改图层的位置: button.layer.position = endPosition; –

0

使用以下的UIView方法与UIViewAnimationOptionAllowUserInteraction在UIViewAnimationOptions参数:

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

+0

这是行不通的。问题是按钮的框架没有被动画。 – user472292

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)) 
    { 
     .... 
    } 
} 
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; 

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

0

最好的解决办法就是你所谓的动画后更改层的位置:

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

button.layer.position = endPosition;