2009-05-18 7 views
2

私はこれを試してみた:コンパイラは警告とエラーがスローされますので、presentationLayerの現在の変換を正しく取得するにはどうすればよいですか?

CATransform3D rotationTransform = [[self.layer presentationLayer] transform]; 

これは、動作しません。

CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"]; 

Warning: Multiple methods "-transform" found. Error: Invalid initializer.

それでは、私はこれを試してみました

Error: Invalid initializer.

どうしたのですか?

答えて

6

-presentationLayerは、idを返します。非常に安全であるために

CATransform3D rotationTransform = [(CALayer*)[self.layer presentationLayer] transform]; 

、あなたが最初にチェックします:あなたは背中のCALayerにキャストする必要が

CATransform3D rotationTransform = {0}; 
CALayer* presentationLayer = (CALayer*)[self.layer presentationLayer]; 
if([presentationLayer respondsToSelector:@selector(transform)]) { 
    rotationTransform = presentationLayer.transform; 
} 

をしかし実際には、これは、このチェックなしで罰金になるだろう。

2番目のケースでは、-valueForKey:は、暗黙的に行うことができないstructに割り当てようとしているidも返します。構造体にオブジェクトポインタをキャストすることはできません。

+0

私はこの質問を引き起こした元の答えでそれを修正しました:http://stackoverflow.com/questions/877198/is-there-a-way-to-figure-out-how-many-degrees-an-現在表示されているビューイング/ 878618#878618。彼はちょっと待っていたかもしれませんし、まったく新しい質問をするのではなく、私の答えを修正しました。しかし、これは人々のためのスタンドアロンとして何か似たようなものを保つのに役立つかもしれません。 –

+0

ちょうどここに追加する...私はこれで苦労していた:すべての変換は、それが最後の位置に設定されたポイントから行う必要があります。したがって、15度に回転したビューは15度から他の角度に回転する必要があります。つまりfromの値を設定することは非常に必要です。そうでなければ、グリッチのある変換が表示されます – Nil

関連する問題