2011-06-01 90 views
1

我有這個代碼轉動一個UIView:旋轉阿爾法一個UIView = 0

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

哪裏degreeToRadians僅僅是一個宏觀的角度從度轉換爲弧度。

只要視圖是可見的,例如alpha = 1,就可以正常工作。當我隱藏它(alpha = 0,這是我的動畫)時,它不再旋轉。我想這是設備在繪圖時「節省」的一種智能方式,但是有什麼辦法可以強制它在alpha爲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時不旋轉。旋轉以另一種方法完成,在那裏我寧願保留它,因爲我還在其中旋轉了一些其他視圖。

+1

嗯...你怎麼能檢測到你的視圖不是繪製時,它的alpha是0?你可以發佈一段代碼,讓你可以看到幫助視圖。 – Zapko 2011-06-01 07:14:34

+0

嗨Zapko,請參閱我的編輯。一旦我顯示它,我可以看到它在隱藏時未被旋轉。 – Structurer 2011-06-01 07:22:03

+0

我相信迪派克對你的問題是正確的。 – Zapko 2011-06-01 07:41:09

回答

1

您每次使用CGAffineTransformMake*時都重置變換。如果你這樣做,你將得到一個旋轉的變換或縮放的變換。我假設縮放後的是旋轉後的,因此您無法看到旋轉的視圖。如果您需要保留兩個效果,則必須使用CGAffineTransformRotate。所以一個規模和旋轉將是

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

訂單可能會有所不同。

+0

嗨迪帕克。這聽起來很合理,但爲什麼它在可見的情況下工作?運行相同的代碼,唯一不同的是alpha值... – Structurer 2011-06-01 07:58:26

+0

'kHelpSmall'和'kHelpBig'的值是什麼? – 2011-06-01 08:03:49

+0

kHelpSmall是0.1f和kHelpBig是1.0f,給它一個縮放效果 – Structurer 2011-06-01 08:07:13