1

今回は、UIImageView でデュアル操作を実行しているときに問題に直面しています

1) Zoom+Flip the Image 

2)Zoom + Reverse the Image 

3)Zoom + Flip or Reverse + Rotate(+- 90)deg

この問題の解決策を見つけるのを手伝ってください。この場合、Zoom の場合、反転 + 反転 + 回転 UIImageView に GuestureRecognizer を使用します。これらの操作には UIButton を使用して、UIImage でこれらの操作を組み合わせて処理する方法を説明します。

正確な問題 画像をズームインまたはズームアウトすると同時に、正確なズームインまたはズームアウト位置で画像を回転(+-90度)または反転または反転したいが、そのとき画像がリセットされて実行される回転、反転、反転などのそれぞれの操作をUIImageで同時に実行したかった

私のコードとして

if (btnNames == "Rotate R") 
 {
 Angle = deg + 90;
 imgview.Transform = CGAffineTransform.MakeRotation (Angle * (float)Math.PI / 180); 
 return Angle;
 } else
 { 
 Angle = deg - 90; 
 imgview.Transform = CGAffineTransform.MakeRotation (Angle * (float)Math.PI / 180); 
  return Angle; 

}

リバース用

CGAffineTransform transform = CGAffineTransform.MakeScale (-1, 1); 
imgView.Transform = transform;
return  true; 

============ フリップ用

if (flips == false) 
 { 
CGAffineTransform transform = CGAffineTransform.MakeScale (1, -1); 
 imgView.Transform = transform; 
return  true; 
 }

私が実装したこのコードは、個別に実行して正常に動作します。しかし、UIImageで同時に作業したい

4

3 に答える 3

1

私がお勧めします:

  • をズーム設定で配置UIImageするUIScrollView
  • を変更して、反転、回転などを行いUIImageます。Transform

ズームを設定するには:

yourScroller.MaximumZoomScale = 5;
yourScroller.MinimumZoomScale = 1;
yourScroller.ViewForZoomingInScrollView = _ => yourImage;

回転の例は次のとおりです。

yourImage.Transform.Rotate (Math.PI / 2)

それをいじってみてください。画像上UIScrollViewで同じように変更する必要があるTransformため、すべてが連携して機能するはずです。

于 2012-08-16T12:23:13.967 に答える
0

私はあなたの意味を本当に理解しているかどうかはわかりませんが、UIViewtransformプロパティを次のように設定して、画像に対して複数の変換を実行しようとしているように思えます(例):

myView.transform = scale;
myView.transform = flip;
myView.transform = rotate;

次に何が起こるかというと、これらのうちの最後の 1 つだけが "アクティブ: ビュー上にある" ということです。

あなたがすべきことは、現在の変換を「保持/保存」し、新しいものをCGAffineTransformConcat次のように追加することです:

myView.transform = scale;
myView.transform = CGAffineTransformConcat(myView.transform, flip);
myView.transform = CGAffineTransformConcat(myView.transform,rotate);

一部の変換では、連結の順序が重要になることに注意してください。

于 2012-08-16T13:22:35.233 に答える
0

変換は、既存の変換に適用することで組み合わせることができます。

CGAffineTransform transform = CGAffineTransformIdentity;

// Rotate
if (btnNames == "Rotate R") {
    Angle = deg + 90;
    transform = CGAffineTransformRotate(transform, Angle * (CGFloat)Math.PI / 180);
} else {
    Angle = deg - 90;
    transform = CGAffineTransformRotate(transform, Angle * (CGFloat)Math.PI / 180);
}

// Reverse
transform = CGAffineTransformScale(transform, -1, 1);

// Flip
if (!flips) {
    transform = CGAffineTransformScale(transform, 1, -1);
}

// Apply combined transformation
imgView.transform = transform;
于 2012-08-16T13:36:50.663 に答える