1

最後に、スタック オーバーフローの無限の喜びを探し回る代わりに、何かを尋ねる理由があります。

私の状況は次のとおりです。内部に1 つの UIImage を持つUIImageViewがあります。CGAffineTranformsを介してUIImageView全体を変換し、高さ方向にスケーリングして特定の角度に保ちます。2 つの CGPoints を介してこの変換データをフィードしているので、基本的には、これら 2 つの点の間の角度とスケールを計算して変換するだけです。

現在、変換は魅力的に機能していますが、最近UIImageメソッドresizableImageWithCapInsetsに出くわしました。これは、画像のフレームを手動で設定した場合 (つまり、フレームを使用してスケールする場合) に問題なく動作しますが、変換を使用するとこれがオーバーライドされるようです。 、それはコアグラフィックスがそれをしているので、私が推測するのは一種の予想です。

私の質問は、a) 画像を変換した後にキャップ インセットを追加するか、b) フレームを介して角度とスケーリングを行うにはどうすればよいですか?

データを提供する 2 つのポイントはタッチ ポイントであるため、大きく異なる可能性があることに注意してください。

コードに飢えた天才を満足させるために、スケーリングを処理している現在の方法のスニペットを次に示します (UIImage の作成時にキャップ インセットのみを実行します)。

float xDiff = (PointB.x - PointA.x) / 2;
float yDiff = (PointB.y - PointA.y) / 2;

float angle = [self getRotatingAngle:PointA secondPoint:PointB];

CGPoint pDiff = CGPointMake(PointA.x + xDiff, PointA.y + yDiff);

self.center = pDiff;

// Setup a new transform
// Set it up with a scale and an angle
double distance = sqrt(pow((PointB.x - PointA.x), 2.0) + pow((PointB.y - PointA.y), 2.0));
float scale = 1.0 * (distance / self.image.size.height);
CGAffineTransform transformer = self.transform;
transformer = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, scale), CGAffineTransformMakeRotation(angle));

// Apply the transformer
self.transform = transformer;
4

1 に答える 1

0

これに適切な答えを追加します。問題の答えはここにあります。

于 2013-12-01T21:42:06.270 に答える