Вращение UIView с альфа = 0 - PullRequest
1 голос
/ 01 июня 2011

У меня есть UIView, который я вращаю с этим кодом:

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

Где степеньToRadians - это макрос для преобразования из градусов в радианы.

Это работает нормально, пока вид видим, например, 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);
    }];
}

Как вы видите, я также масштабирую его для лучшего эффекта. Прекрасно работает, когда видим, не вращается, когда альфа = 0. Вращение выполняется другим методом, где я бы предпочел сохранить его, так как я также вращаю некоторые другие виды там.

1 Ответ

1 голос
/ 01 июня 2011

Вы сбрасываете преобразование каждый раз, когда используете CGAffineTransformMake*.Если вы сделаете это, вы получите либо повернутое преобразование, либо масштабированное.Я предполагаю, что масштабированный находится после повернутого, и, следовательно, вы не можете видеть повернутый вид.Если вам нужны оба эффекта, вам придется использовать CGAffineTransformRotate.Так что масштаб и поворот будут

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

Порядок может отличаться.

...