【发布时间】:2023-03-29 17:24:01
【问题描述】:
我的视图控制器中的动画有问题。我有两个UIViews:蓝色视图和绿色视图。蓝色视图位于绿色视图之上。在绿色视图中,我有一个UIView,它是一个动画正弦波,另一个UIView 称为“recordingIndicatorView”,它由一个实现了闪烁动画的文本标签组成。当我向上滑动蓝色视图时,会显示绿色视图,正弦波视图开始动画,recordingIndicatorView 开始闪烁。当我向下滑动蓝色视图时,动画结束,正弦视图和recordingIndicatorView 被隐藏。
但是,如果我向上滑动蓝色视图,向下滑动,然后快速向上滑动蓝色视图,闪烁动画会被丢弃并开始更快地闪烁。
- (IBAction)handleUpSwipe:(UISwipeGestureRecognizer *)recognizer
{
if(viewIsUp == NO)
{
[self.sineWave animateWave];
[self showSine];
[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
[self moveViewsUp];
} completion:^(BOOL finished){
}];
stopBlinking = NO;
[self.recordingIndicatorView setHidden:NO];
[self flashOn:self.recordingIndicatorView];
}
}
- (IBAction)handleDownSwipe:(UISwipeGestureRecognizer *)recognizer
{
if(viewIsUp == YES)
{
[self stopRecording];
if(self.panedView.frame.origin.y <0)
{
[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
[self hideSine];
[self moveViewsDown];
} completion:^(BOOL finished){
[self.sineWave.layer removeAllAnimations];
}];
}
}
}
-(void) stopRecording
{
stopBlinking = YES;
[self hideSine];
[self.recordingIndicatorView setHidden:YES];
}
- (void)flashOff:(UIView *)v
{
[UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^ {
self.recordingIndicatorView.alpha = 0.01;
} completion:^(BOOL finished) {
if(stopBlinking == NO)
{
[self flashOn:self.recordingIndicatorView];
}
}];
}
- (void)flashOn:(UIView *)v
{
[UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^ {
self.recordingIndicatorView.alpha = 1;
} completion:^(BOOL finished) {
[self flashOff:self.recordingIndicatorView];
}];
}
-(void) moveViewsDown
{
if(viewIsUp)
{
self.panedView.frame = CGRectOffset( self.panedView.frame, 0, 274);
self.sineWave.frame = CGRectOffset(self.sineWave.frame, 0, 246);
self.micImageView.frame = CGRectOffset(self.micImageView.frame, 0, 85.5);
viewIsUp = NO;
}
}
-(void) moveViewsUp
{
if(!viewIsUp)
{
self.panedView.frame = CGRectOffset(self.panedView.frame, 0, -274);
self.sineWave.frame = CGRectOffset(self.sineWave.frame, 0, -246);
self.micImageView.frame = CGRectOffset(self.micImageView.frame, 0, -85.5);
viewIsUp = YES;
}
}
【问题讨论】:
标签: ios uiview uianimation