2

UIGestureRecognizersを使用して、uiimageviewを使用して画像を回転およびサイズ変更しています。ここで問題となるのは、UIImageViewトランスフォーム(CGAffineTransform)プロパティから新しいサイズの画像を取得する必要があることです。StackOverFlowでこのコードを見つけましたが、適切な値を返していません。imageviewはサイズ変更されるだけでなく、回転されるため。だから私の質問は、回転およびサイズ変更されたUIImageViewの変換プロパティから新しいサイズと場所を取得する方法ですか?

CGRect newRect = CGRectApplyAffineTransform(self.imageView.bounds, self.imageView.transform);

誰でも助けることができますか?

ありがとう

答え OK、修正を見つけました。サイズ計算で問題を引き起こした主なものは回転でした。それで、ここでそれをチェックしたのは何でしたか。

 CGFloat angle = atan2(self.imageView.transform.b, self.imageView.transform.a);
 CGAffineTransform tempTransform = CGAffineTransformRotate(self.imageView.transform, -angle);  
 CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height), tempTransform);

みんなありがとう

4

2 に答える 2

1

次のように、一時ポイントを使用して、サイズの寸法の変換をシミュレートできます。

CG_INLINE CGSize FAE_CGSizeCalcDimentionsAfterApplyTransformation(CGSize size, CGAffineTransform transform)
{
    CGPoint widthPoint = CGPointMake(size.width, 0.0);
    CGPoint heightPoint = CGPointMake(0.0, size.height);

    CGPoint centerAfterTransfrom = CGPointApplyAffineTransform(CGPointZero, transform);
    CGPoint widthAfterTransform = CGPointApplyAffineTransform(widthPoint, transform);
    CGPoint heightAfterTransform = CGPointApplyAffineTransform(heightPoint, transform);

    CGSize sizeAfterTransformation = CGSizeMake(TB_CGPointCalcDistance(centerAfterTransfrom, widthAfterTransform), TB_CGPointCalcDistance(centerAfterTransfrom, heightAfterTransform));

    return sizeAfterTransformation;
}
于 2014-08-09T06:14:08.750 に答える
0

アップルのドキュメントから:

一般に、アフィン変換は四角形を保持しないため、関数 CGRectApplyAffineTransform は、rect パラメータの変換されたコーナー ポイントを含む最小の四角形を返します。

多分あなたはこれを試してみるべきですCGSizeApplyAffineTransform::

既存の高さと幅を変換した結果の高さと幅を返します。

imageView の古いサイズを使用してみてください。

CGSize oldImageSize = imageView.bounds.size;

// Transforming code here

CGAffineTransform currentTransform = imageView.transform;
CGSize newImageSize = CGSizeApplyAffineTransform(oldImageSize, currentTransform);
于 2012-04-24T12:50:19.010 に答える