2

CALayerのアフィン変換を変更して、そこに描かれているものが変形するようにしようとしています。

最初は、CALayersを使用せずにこれを実行し、CGContextConcactCTMに渡された別のCGAffineTransformを使用して再描画しました。

それはうまくいきましたが、十分な速さではなかったので、毎回再描画されないようにCALayerで行うことにしました。それはただ変容します。

問題は、myLayer.affineTransform=myTransform;を設定することです。CGContextConcatCTM(myTransform)を使用して再描画するのと同じ効果はないようです。

私はObjective-Cに不慣れで、数学がかなり苦手なので、何か間違ったことをしていると確信しています。しかし、私は何を見ることができません。

ありがとう。

4

1 に答える 1

0

わかりました、気にしないでください、私は知りました。

myLayer.affineTransformはレイヤーの中心を基準にして変換を実行しますが、CGContextContactCTMは原点を基準にして変換を実行します。

したがって、他の2つの変換を連結しました。

    CGPoint center;
    center.x = capa.bounds.origin.x + capa.bounds.size.width/2;
    center.y = capa.bounds.origin.y + capa.bounds.size.height/2;        
    CGAffineTransform trf1 = CGAffineTransformMakeTranslation(center.x, center.y);
    CGAffineTransform trf2 = CGAffineTransformMakeTranslation(-center.x, -center.y);        
    capa.affineTransform = CGAffineTransformConcat(trf1, CGAffineTransformConcat(mat, trf2));      
于 2011-09-26T20:18:32.020 に答える