我在drawRect中繪製了一個指南針撥號盤,我想避免重繪它,但是將它轉換爲標題指南針標題更改。當我使用CABasicAnimation這樣的:旋轉不帶動畫的自定義UIView
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:_dialAngle*M_PI/180];
animation.toValue = [NSNumber numberWithFloat:dialAngle*M_PI/180];
animation.duration = 0.0;
animation.repeatCount = 0;
animation.removedOnCompletion = false;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[dial.layer addAnimation:animation forKey:@"transform.rotation.z"];
它旋轉如預期(頂部和文字紅色箭頭是從指南針刻度盤不同的看法):
我真的不希望動畫,所以我用的變體,如:
[dial.layer setValue:[NSNumber numberWithDouble: dialAngle*M_PI/180] forKeyPath:@"transform.rotation.z"];
或者:
dial.transform = CGAffineTransformMakeRotation(arrowAngle*M_PI/180);
或者:
CATransform3D t = CATransform3DIdentity;
dial.layer.transform = CATransform3DRotate(t, dialAngle*M_PI/180, 0.0, 0.0, 1.0);
他們都得出了相同的結果歪斜:
自動佈局和約束不存在於這個觀點。
我應該錯過了一些東西,我不知道它是什麼。我錯過了什麼以獲得與動畫相同的結果?
此外,從您的經驗,我應該真的使用旋轉轉換有利於drawRect?在profiler中,我看到drawRect需要花費很多CPU週期。當我使用轉換時,我沒有看到「我的」cpu週期,但是當我密集旋轉時,總CPU值幾乎相同。
這將是偉大的馴服轉換你的幫助:)!