2012-04-24 6 views
2

私はUIGestureRecognizersを使用して、uiimageviewを使用して画像を回転およびサイズ変更しています。今問題は、UIImageView transform(CGAffineTransform)プロパティから新しいサイズのイメージを取得する必要があることです。 StackOverFlowでこのコードが見つかりましたが、適切な値が返されていません。画像ビューはサイズ変更されるだけでなく回転されるのでだから私の質問は、回転し、サイズ変更されたUIImageViewの変換プロパティから新しいサイズと位置を取得する方法ですか?CGAffineTransformを適用した後で、imageviewから新しいサイズの画像を取得します。

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

誰でも手助けできます。

おかげ

ANSWER OKは、私が修正を発見しました。サイズ計算に問題を生じさせる主なものは回転でした。だからここで何を確認したのですか?アップルdocから

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); 

おかげで皆

答えて

0

アフィン変換は、一般的に長方形を保存しないので、 機能CGRectApplyAffineTransformはの変形角のポイントを含む最小の矩形 を返します。 rectパラメータ

たぶん、あなたはこの試してみてください:CGSizeApplyAffineTransform

は 既存の高さと幅の変換から生じた高さと幅を返します。

ImageViewの古いサイズを使用してみてください:

​​
+2

ありがとう!しかし、私はすでに試してみましたが、この関数は幅を正しく返しますが、高さの値は正確ではありません。何か案が? – andy

+0

こんにちは、これは私の助けてください@ジョナサンNaguinの答えを取得しました – Babul

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; 
} 
+0

TB_CGPointCalcDistanceは何ですか? –

+0

_TB_CGPointCalcDistance_は、点間の距離を計算するカスタム関数です。sqrt(dx * dx + dy * dy) –

関連する問題