我正在尝试动画UIButton以向上移动屏幕。用户可以随时触摸它。但是,它似乎不会在移动时响应触摸,只是在动画的开始和结束时。我想这是因为按钮本身不移动,只是它的图像。我有什么想法可以解决这个问题?到目前为止,这是我的代码。谢谢!
- (void)viewDidLoad {
[self newBubble];
[super viewDidLoad];
}
- (void)newBubble {
UIButton *bubble = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
bubble.frame = CGRectMake(10, 380, 50, 50);
UIImage *bubbleImage = [UIImage imageNamed:@"bubble.png"];
[bubble setBackgroundImage:bubbleImage forState:UIControlStateNormal];
bubble.imageView.contentMode = UIViewContentModeScaleAspectFit;
[bubble addTarget:self action:@selector(bubbleBurst:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:bubble];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:5.0];
CGAffineTransform newTransform = CGAffineTransformMakeScale(1.5, 1.5);
bubble.transform = CGAffineTransformTranslate(newTransform, 10, -200);
[UIView commitAnimations];
}
- (IBAction)bubbleBurst:(id)sender {
NSLog(@"Bubble burst");
UIButton *bubbleBurst = sender;
[bubbleBurst removeFromSuperview];
}
答案 0 :(得分:13)
+[UIView animateWithDuration:delay:options:animations:completion:]
方法采用UIViewAnimationOptions
参数。如果您添加UIViewAnimationOptionAllowUserInteraction
,则可以在动画时按下按钮:
[UIView animateWithDuration:5.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
CGAffineTransform newTransform = CGAffineTransformMakeScale(1.5, 1.5);
bubble.transform = CGAffineTransformTranslate(newTransform, 10, -200);
} completion:nil];
答案 1 :(得分:1)
在发布类似问题之后,我找到了answer here
基本上,您必须使用NSTimer逐帧移动按钮。在我的情况下,我担心会有太多的NSTimers涉及移动每个按钮,但最后我使用了一个单独的计时器,它循环通过一系列按钮并逐个移动它们。
答案 2 :(得分:0)
我很确定如果你想让按钮在移动时响应触摸,你必须使用Core Animation,但是我从来没有这样做过,所以这真的是一个小贴士而不是答案!
答案 3 :(得分:-4)
我同意。我认为问题在于你没有使用Core Animation。我无法相信你无法为自己解决这个问题。