3タッチで操作される画像があります。
上向きの矢印の画像としましょう。 180度回転した後、矢印が下向きになりましたCGAffineTransformプロパティをリセットして、0度に戻ったと考えます。
画像の角度が0 OR 180。
前もって感謝します。
編集後のAter 5の返信:
うーん、これらの答えのいずれかが私が望んでいたことをするかどうかはわかりません。はっきりしないことをおaびします。
上記の問題やその他の問題を防ぐために、180度回転した後にすべてをリセットします。たとえば、画像が180度回転すると、CGAffineTransformプロパティは180%回転したことを認識します。その時点でpopertiesをリセットしたいので、CGAffineTransformは、画像が視覚的に上下逆になっているにもかかわらず、180度ではなく0度になったと見なします。 180度に回転したらすぐに、これを視覚的な変更なしで実行したいです。
これがより明確であることを願っています...
変換をリセットして、イメージが元のように表示されるようにする場合は、変換をIDに戻すだけで済みます。
self.imageView.transform = CGAffineTransformIdentity
変換された画像に任意の変換を適用する場合、最も簡単な方法は、既存の変換を取り込むCGAffineTransformメソッドを使用することです。既存の変換を送信するだけです。例えば:
CGAffineTransform scale = CGAffineTransformMakeScale(zoom, 1);
self.imageView.transform = CGAffineTransformConcat(self.imageView.transform, scale);
まったく変換せずに表示される画像が本当に必要な場合は、別の画像に描画する必要があります。それもそれほど難しくはありませんが、最初の解決策としてはお勧めしません。このコードは、UIImageViewを含む、任意のビューのUIViewカテゴリのコンテキストで機能します。
- (UIImage *) capture {
CGRect screenRect = self.frame;
CGFloat scale = [[UIScreen mainScreen] scale];
UIGraphicsBeginImageContextWithOptions(screenRect.size, YES, scale);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[self.layer renderInContext: ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Swift、Swift 4およびSwift 5
これでCGAffineTransformをリセットできます。
self.imageView.transform = CGAffineTransform.identity
短いバージョンは.identity
そのようです:
self.imageView.transform = .identity
昨日は似たようなことをしましたが、もっと簡単でした。
既存の変換値を見つけます。次に、それを新しい変換へのオフセットとして配置します。
例を参照してください:
// Rotate right/clockwise
CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
CGFloat degrees = radians * (180 / M_PI);
// Yeah yeah, I like degrees.
CGAffineTransform transform = CGAffineTransformMakeRotation((90 + degrees) * M_PI/180);
imageView.transform = transform;
// Rotate left/anticlockwise
CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
CGFloat degrees = radians * (180 / M_PI);
// Yeah yeah, I like degrees.
CGAffineTransform transform = CGAffineTransformMakeRotation((-90 + degrees) * M_PI/180);
imageView.transform = transform;
これは、既存のトランスフォーム値を新しいトランスフォームに加算して適切な動きを実現したい場合のヒントにすぎません。スケールなどに同じ方法を使用します。
YESに設定された加算プロパティでCABasicAnimationを使用することを提案した人もいました。しかし、それを機能させることはできませんでした。
目的C:
self.transform = CGAffineTransformIdentity;
複数の変換を組み合わせることができます。例えば:
CGAffineTransform rotation = CGAffineTransformMakeRotation(up ? 0 : M_PI);
imageView.transform = CGAffineTransformScale(rotation,xScale, yScale);