我尝试了很多不同的选项,并查看了大约15个堆栈答案,我只是无法解决这个问题。
代码基本上是试图淡出,然后每次点击发生时弹回一个视图。它第一次工作正常,但随后不会工作。
- (void)handleTap:(UIGestureRecognizer*)gestureRecognizer
{
self.view.transform = CGAffineTransformIdentity;
__block HelpScreenController* weakSelf = self;
[UIView animateWithDuration:10
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^(void) {
weakSelf.view.alpha = 0;
}
completion:^(BOOL finished) {
if (finished) {
weakSelf.view.alpha = 100.0f;
[weakSelf.view.layer removeAllAnimations];
[weakSelf.view setNeedsDisplay];
}
}];
}
它完美地运行第一次点击 - 它在10秒的时间内从不透明平滑过渡到完全透明。第二次敲击它会在那里坐10秒钟,然后为心脏跳动透明,然后再回到完全不透明状态。
我怎样才能让它每次都能流畅地制作动画?
提前致谢!
答案 0 :(得分:2)
alpha
值介于0.0f
和1.0f
之间。将完成功能块中的alpha
值设置为1.0f
而不是100.0f
可以解决问题。
因为大于1.0f
的值都是完全不透明的,您将看不到从100.0f
到1.0f
的过渡(动画的99%),因此过渡的有效持续时间从1.0f
到0.0f
只需0.1秒而不是10秒(不完全是因为动画曲线,但你明白了。)
答案 1 :(得分:2)
您可以使用CABasicAnimation代替。尝试这样的事情:
- (void)handleTap:(UIGestureRecognizer*)gestureRecognizer
{
CALayer *viewLayer = self.view.layer;
[viewLayer removeAllAnimations];
CABasicAnimation *fader = [CABasicAnimation animationWithKeyPath:@"opacity"];
fader.fromValue = [NSNumber numberWithFloat:0.0];
fader.toValue = [NSNumber numberWithFloat:1.0];
fader.duration = 10;//change the duration and autoreverses option to fit with your look
fader.autoreverses = YES;
fader.repeatCount = 0;
[viewLayer addAnimation:fader forKey:@"fadeAnimation"];
}
希望它有所帮助!