【发布时间】:2011-08-25 13:46:29
【问题描述】:
是否可以只旋转 UIImageView 中的图像?我正在寻找有关它的信息,但我只找到了如何旋转 UIImageVeiw 的信息。
【问题讨论】:
标签: iphone objective-c ios uiimageview uiimage
是否可以只旋转 UIImageView 中的图像?我正在寻找有关它的信息,但我只找到了如何旋转 UIImageVeiw 的信息。
【问题讨论】:
标签: iphone objective-c ios uiimageview uiimage
您可以使用以下代码旋转图像。请注意,这使用了一个 CGImageRef,您可以通过
从 UIImage 获取它CGImageRef imageRef = [self CGImageRotatedByAngle:[image CGImage] angle:30];
获得旋转后的图像后,您可以将 ImageView 的图像设置为新的旋转图像,如下所示:
UIImage* img = [UIImage imageWithCGImage: imageRef];
myImageView.image = img;
这是一个旋转 imageRef 的方法:
- (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle
{
CGFloat angleInRadians = angle * (M_PI / 180);
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGRect imgRect = CGRectMake(0, 0, width, height);
CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);
CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bmContext = CGBitmapContextCreate(NULL,
rotatedRect.size.width,
rotatedRect.size.height,
8,
0,
colorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextSetAllowsAntialiasing(bmContext, YES);
CGContextSetShouldAntialias(bmContext, YES);
CGContextSetInterpolationQuality(bmContext, kCGInterpolationHigh);
CGColorSpaceRelease(colorSpace);
CGContextTranslateCTM(bmContext,
+(rotatedRect.size.width/2),
+(rotatedRect.size.height/2));
CGContextRotateCTM(bmContext, angleInRadians);
CGContextTranslateCTM(bmContext,
-(rotatedRect.size.width/2),
-(rotatedRect.size.height/2));
CGContextDrawImage(bmContext, CGRectMake(0, 0,
rotatedRect.size.width,
rotatedRect.size.height),
imgRef);
CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);
CFRelease(bmContext);
[(id)rotatedImage autorelease];
return rotatedImage;
}
【讨论】:
看看旋转 ImageView 的图层。您将需要导入 QuartzCore 库以使其可访问。
myImageView.layer.transform = CGAffineTransformMakeRotation (1.5);
【讨论】:
setAffineTransform
请试试这个,它对我有用:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationRepeatCount:10];
myImgView.transform = CGAffineTransformMakeRotation(M_PI);
[UIView commitAnimations];
祝你好运!
【讨论】:
以下代码可以在 Swift 中正常工作:
let img = UIImage(CGImage: self.imageView.image!.CGImage, scale: 1.0, orientation: UIImageOrientation.Right)
self.imageView.image = img
self.imageView.setNeedsLayout()
【讨论】:
如果您需要旋转/翻转图像以进行本地化,您可以使用以下方法:
imageView.image = imageView.image?.imageFlippedForRightToLeftLayoutDirection()
【讨论】: