1

このコードで回転するUIViewがあります。

helpView.transform = CGAffineTransformMakeRotation(degreesToRadians( rotationAngle ));

ここで、degreeToRadiansは、度からラジアンに変換するマクロです。

これは、ビューが表示されている限り正常に機能します(例:alpha = 1)。非表示にすると(alpha = 0、アニメーション化)、それ以上回転しなくなります。これは、デバイスが描画時間を「節約」するための賢い方法だと思いますが、アルファが0の場合でも、強制的に描画させる方法はありますか?それ以外の場合は、再度表示する前に回転させる必要があります。

良いアイデアはありますか?

ありがとう

編集:これは、ビューを表示/非表示にするために使用するコードです。

-(void)showHelp
{
    bool helpAlpha = !helpView.alpha;
    CGFloat newScale;

    if (helpView.alpha) {
        newScale = kHelpSmall;
        helpView.transform = CGAffineTransformMakeScale(kHelpBig, kHelpBig);
    } else {
        newScale = kHelpBig;
        helpView.transform = CGAffineTransformMakeScale(kHelpSmall, kHelpSmall);
    }

    [UIView animateWithDuration:(kAnimationTimeShort / 2) animations:^(void) {
        [helpView setAlpha:helpAlpha];
        helpView.transform = CGAffineTransformMakeScale(newScale, newScale);
    }];
}

ご覧のとおり、より良い効果を得るためにスケーリングも行っています。表示されている場合は完璧に機能し、alpha = 0の場合は回転しません。回転は別の方法で行われます。他のビューも回転するので、そのままにしておきます。

4

1 に答える 1

1

を使用するたびに変換をリセットしますCGAffineTransformMake*。これを行うと、回転した変換またはスケーリングされた変換のいずれかが得られます。スケーリングされたものは回転されたものの後にあると想定しているため、ビューが回転しているのを見ることができません。両方の効果を残す必要がある場合は、を使用する必要がありますCGAffineTransformRotate。したがって、スケールと回転は次のようになります

helpView.transform = CGAffineTransformMakeScale(kHelpSmall, kHelpSmall);
helpView.transform = CGAffineTransformRotate(helpView.transform, degreesToRadians(rotationAngle));

順序は異なる場合があります。

于 2011-06-01T07:30:09.767 に答える