1

私はさまざまなオプションを試しましたが、約 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 秒間で不透明から完全に透明にスムーズに移行します。2回以上タップすると、10秒間そこに留まり、ハートビートの間透明になり、完全に不透明に戻ります。

毎回スムーズにアニメーション化するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

3

alpha値は0.0f1.0fです。代わりにalpha完了ブロックの値を設定すると、問題が解決するはずです。1.0f100.0f

より大きい値1.0fはすべて完全に不透明であるため、 から100.0fへの遷移 (アニメーションの 99%) は表示されません。そのため、 からへ1.0fの遷移の有効期間は10 秒ではなく約 0.1 秒になります (厳密には、アニメーション曲線ですが、アイデアは得られます)。1.0f0.0f

于 2013-04-26T04:37:17.580 に答える
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"];
}

それが役に立てば幸い!

于 2013-04-26T04:46:03.440 に答える