سؤال

هل هناك مشكلات معروفة في معرفات الإيماءات وطرق فئة UIVIEW للرسوم المتحركة؟

أواجه مشاكل مع سلسلة من الرسوم المتحركة على وحدة الاتصال UIGESTURERECOONIZER. إذا تم بدء تسلسل الرسوم المتحركة من رد اتصال قياسي مثل Touchupinside ، فإن الرسوم المتحركة تعمل بشكل جيد. إذا تم بدء تشغيله عبر UilongPressUrgeSureReCognizer ، فإن الرسوم المتحركة الأولى تقفز إلى النهاية وتبدأ الرسوم المتحركة الثانية على الفور.

إليك عينة توضح مشكلتي. في .xib للمشروع ، لدي uiimageview متصل بـ ViewTomove iboutlet. لديّ أيضًا Uibultton متصل بـ Startbutton iboutlet ، وقد قمت بتوصيل عمله إلى startbuttonclicked ibacte. يعمل Touchupinside Action كما أريد ، لكن LongpressestereCognizer يتخطى نهاية الرسوم المتحركة الأولى بعد حوالي نصف ثانية. عندما أقوم بتخليص الرسوم المتحركة الثانية (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).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top