2011-11-09 3 views
0

私は、ユーザーがパンとピンチジェスチャー認識子を使用して画面上で画像をドラッグ/スケールすることを可能にするシンプルなアプリを持っています。アップルのAPIには、スケールメソッドで行っているように、トランスフォームを実行した後、フレームが「無効」になるという一般的な知識があります。私が変換を実行してもすべてがうまく動作するようになっても、スケールとサイズを計算するために私の画像ビューのフレームを常に使用していますが、フレームが無効になったのは何ですか?変換が実行された後、 "invalid frame"とはexactleyを意味しますか?

移動して拡大縮小された画像をトリミングしようとしているので、これを尋ねます。フレームの値を使用してトリミング領域を決定しています。私は、無効なフレームが問題であるか、それが何か他のものである可能性があるかどうか疑問に思っています。あなたの参照用コードは次のとおりです。

CGRect croppedRect = CGRectMake(fabsf(self.oldImageView.frame.origin.x), fabsf(self.oldImageView.frame.origin.y), 316, 316); 
CGImageRef croppedImageRef = CGImageCreateWithImageInRect(self.oldImageView.image.CGImage, croppedRect); 
UIImage *croppedImage = [UIImage imageWithCGImage: croppedImageRef]; 
CGImageRelease(croppedImageRef); 
UIImageView *newImageView = [[UIImageView alloc] initWithImage: croppedImage]; 
+0

無効で無効ではありませんか?それらのものは異なっている – Dani

+0

私は正直であるか分からない。 –

+0

無効にすると、再描画する必要があることを意味します。サイズが間違っているとは限りません。私はこの文脈で無効なものが何を意味するのかわかりません – Dani

答えて

1

無効なフレーム=面白い結果です。

無効とは、間違った値を持つことが保証されていないことを意味しますが、その可能性があります。あなたは運を使ってフレームを使い果たしました。限り、それが回転していないよう

CGRect frame = [[view superview] convertRect:view.bounds fromView:view]; 

:あなたが変換ビューを持っている、とあなたはフレームが必要な場合は

は、あなたがこのコードを使用することができます。回転している場合、「フレーム」はCGRectとして表現することはできません。このCGRectは、軸に整列した矩形のみを表すことができます。その情報があなたのプログラムに使用されている場合は、convertPointを使用して境界の各隅を変換することができます。

それともあなたは、その場合には、とにかくフレームを使用すべきではない

view.bounds = [view convertRect:newFrame fromView:[view superview]]; 
+0

あなたのコードをもっと慎重に読んでいますが、この答えがあなたの問題を解決するかどうかはわかりません。しかし、フレームを使用する他のケースにも適用する必要があります。なぜなら、そのコードは信頼できない可能性があるからです。 – morningstar

+0

ありがとう、そのコード行はまさに私が探していたものです。 –

0

を回転していない場合は、フレームを設定します。フレームはスーパービューの座標系で定義されます。画像の座標系でCGImageCreateWithImageInRectの引数を指定します。これは変換されたときでも、画像ビューの座標系と同じです。あなたは、そのコードのフレームの代わりに境界を使うべきです。どちらか、または(0.0、0.0)を原点とします。私はあなたが達成しようとしていることをかなり伝えることはできません。

関連する問題