2012-07-09 16 views
3

我想向按鈕添加一個動畫,使按鈕從A點移到B點。
下面的代碼可以做到。但奇怪的是該按鈕被移動,它不能再檢測到觸摸。
如果你,如果我點擊按鈕的原始位置,它可以觸發按鈕事件。是否我的代碼中缺少任何東西? 請幫幫我。UIButton在CABasicAnimaton之後的錯誤位置接收到touchEvents

- (IBAction)button:(id)sender 
{ 

UIButton *lineButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[lineButton addTarget:self action:@selector(press:)forControlEvents:UIControlEventTouchUpInside]; 
[lineButton setFrame:CGRectMake(50, 50, 50, 50)]; 
[self.view addSubview:lineButton]; 
CABasicAnimation *lineAnimation; 


lineAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; 
[lineAnimation setRemovedOnCompletion:NO]; 
[lineAnimation setDuration:0.15]; 


[lineAnimation setFillMode:kCAFillModeForwards]; 
[lineAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]; 

CGRect rect = CGRectMake(100, 200, 50, 50); 
    lineAnimation.fromValue = [NSValue valueWithCGPoint: CGPointMake(50, 50)]; 
    lineAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect))]; 
[lineAnimation setAutoreverses:NO]; 
[lineButton.layer addAnimation:lineAnimation forKey:@"line"]; 
} 

回答

2

你必須像addAnimation方法後設置新的框架和層到您的按鈕的幀/層:

lineButton.frame = rect 
lineButton.layer.frame = rect 

或者你可以簡單地使用動畫塊(更容易使用,代碼看起來不錯,等)如:

[UIView animateWithDuration:0.15 animations:^{ 
    lineButton.frame = CGRectMake(100, 200, 50, 50); 
}]; 
+0

謝謝你,萊昂納多! – NikoTung 2012-08-07 01:32:53

+0

歡迎您。 :)只記得把這個答案設置爲正確的答案。 – 2012-08-07 05:04:14

0

在您的interfacebuilder中,正確設置按鈕和setframe的autoresizing屬性。如果您旋轉設備或模擬器,則框架大小調整將自動完成。那麼你會失去原有的框架。