0

手势识别器和动画的 UIView 类方法是否存在已知问题?

我在 UIGestureRecognizer 回调的 UIImageView 上遇到一系列动画问题。如果动画序列是从像 TouchUpInside 这样的标准回调开始的,则动画效果很好。如果是通过 UILongPressGestureRecognizer 启动的,那么第一个动画跳到最后,第二个动画立即开始。

这是一个说明我的问题的示例。在项目的 .xib 中,我有一个连接到 viewToMove IBOutlet 的 UIImageView。我还有一个连接到 startButton IBOutlet 的 UIButton,并且我已将其 TouchUpInside 操作连接到 startButtonClicked IBAction。TouchUpInside 动作按我的意愿工作,但 longPressGestureRecognizer 在大约半秒后跳到第一个动画的结尾。当我 NSLog 第二个动画(animateTo200)时,我可以看到它在长按启动动画时被调用了两次,但在按钮的 TouchUpInside 动作启动动画时只有一次。

- (void)viewDidLoad {
[super viewDidLoad];

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startButtonClicked)];
NSArray *recognizerArray = [[NSArray alloc] initWithObjects:longPressRecognizer, nil];
[startButton setGestureRecognizers:recognizerArray];

[longPressRecognizer release];
[recognizerArray release];
}

-(IBAction)startButtonClicked {

if (viewToMove.center.x < 150) {
    [self animateTo200:@"Right to left" finished:nil context:nil];
} else {
    [self animateTo100:@"Right to left" finished:nil context:nil];
}
}

-(void)animateTo100:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Right to left" context:nil];
[UIView setAnimationDuration:4];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateTo200:finished:context:)];
viewToMove.center = CGPointMake(100.0, 100.0);
[UIView commitAnimations];          
}

-(void)animateTo200:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Left to right" context:nil];
[UIView setAnimationDuration:4];
viewToMove.center = CGPointMake(200.0, 200.0);
[UIView commitAnimations];          
}
4

1 回答 1

4

startButtonClicked您应该更改to的签名,- (void)startButtonClicked:(UIGestureRegognizer *)gestureRecognizer然后state在方法中查询手势识别器的属性。UIGestureRecognizerStateBegan手势识别器将以不同的状态(例如和)多次调用其动作方法UIGestureRecognizerStateEnded

于 2010-04-23T20:31:53.730 回答