iPhone SDK 3.2 uigeSturerognizer干扰了Uiview动画吗?
-
01-10-2019 - |
题
手势识别器和动画的Uiview类方法是否存在已知问题?
我在UigeStureregognizer回调的UIImageView上使用一系列动画序列有问题。如果动画序列是从诸如Touchupinside之类的标准回调开始的,则动画可以正常运行。如果它是通过UilongPressgestureRecognizer启动的,则第一个动画会跳到末尾,第二个动画立即开始。
这是一个说明我的问题的示例。在该项目的.xib中,我有一个连接到iboutlet的UIImageView。我也有一个连接到StartButton Iboutlet的Uibutton,并且将其TouchupinSide的动作与StartButtonClickClickClickClickCaltion相连。 Touchupinside的动作正如我想要的那样工作,但是在大约半秒之后,LongpressestureRecognizer跳到了第一个动画的结尾。当我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];
}
解决方案
您应该更改签名 startButtonClicked
到 - (void)startButtonClicked:(UIGestureRegognizer *)gestureRecognizer
然后查询手势识别器的 state
该方法中的属性。手势识别器将多次与不同状态调用其动作方法(例如 UIGestureRecognizerStateBegan
和 UIGestureRecognizerStateEnded
).
不隶属于 StackOverflow