CGAffineTransformMake を使用して UIImageView を垂直方向に反転しています。正常に動作しますが、UIImageview の新しい反転位置を保存していないようです。これは、2 回目に反転しようとすると (以下の行コードを実行)、機能しないためです。
shape.transform = CGAffineTransformMake(1, 0, 0, 1, 0, 0);
助けてください。
前もって感謝します。
ケダル
CGAffineTransformMake を使用して UIImageView を垂直方向に反転しています。正常に動作しますが、UIImageview の新しい反転位置を保存していないようです。これは、2 回目に反転しようとすると (以下の行コードを実行)、機能しないためです。
shape.transform = CGAffineTransformMake(1, 0, 0, 1, 0, 0);
助けてください。
前もって感謝します。
ケダル
ご想像のとおり、変換は自動的に加算/累積されません。変換を割り当てると、ターゲットが 1 回だけ変換されます。
各変換は非常に具体的です。ビューを +45 度回転させる回転変換を適用すると、一度だけ回転することがわかります。同じ変換を再度適用しても、ビューがさらに +45 度回転することはありません。ビューは既に +45 度回転されており、それが変換で行われるすべてであるため、同じ変換をその後すべて適用しても、目に見える効果はありません。
変換を累積的に行うには、既存の変換を単に置き換えるのではなく、新しい変換を既存の変換に適用する必要があります。したがって、使用する後続の各ローテーションについて前述したように:
shape.transform = CGAffineTransformRotate(shape.transform, M_PI);
これにより、新しい変換が既存の変換に追加されます。この方法で +45 度の変換を追加すると、適用されるたびにビューがさらに +45 回転します。
私はあなたと同じ問題を抱えており、解決策を見つけました!UIImageView
アニメーションがあるので、を回転させたいです。画像を保存するには、次の方法を使用します。
void CGContextConcatCTM(CGContextRef c, CGAffineTransform transform)
変換パラメータはあなたの変換であるUIImageView
ため、imageViewに対して行ったことはすべて画像と同じになります! そして、のカテゴリメソッドを書きましたUIImage
。
-(UIImage *)imageRotateByTransform:(CGAffineTransform)transform{
// calculate the size of the rotated view's containing box for our drawing space
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
rotatedViewBox.transform = transform;
CGSize rotatedSize = rotatedViewBox.frame.size;
[rotatedViewBox release];
// Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
// Move the origin to the middle of the image so we will rotate and scale around the center.
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
//Rotate the image context using tranform
CGContextConcatCTM(bitmap, transform);
// Now, draw the rotated/scaled image into the context
CGContextScaleCTM(bitmap, 1.0, -1.0);
CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
これがあなたを助けることを願っています。
以前の変換の効果を元に戻したい場合は、shape.transform プロパティの値を CGAffineTransformIdentity に設定することを検討してください。
ビューの変換プロパティを設定すると、既存の変換が置き換えられます。追加するのではありません。そのため、回転を引き起こす変換を割り当てると、以前に構成したフリップはすべて忘れられます。
以前に変換したビューに追加の回転またはスケーリング操作を追加する場合は、既存の変換を指定できる関数を調査する必要があります。
つまり、使用する代わりに
shape.transform = CGAffineTransformMakeRotation(M_PI);
既存の変換を指定された回転に置き換えます。使用できます
shape.transform = CGAffineTransformRotate(shape.transform, M_PI);
これにより、既存の変換 (それが何であれ) に回転が適用され、それがビューに割り当てられます。CGAffineTransformRotate に関する Apple のドキュメントを参照してください。
ところで、ドキュメントには次のように書かれています。