iOS中实现imageView任意角度旋转的方法

2025-05-29 0 100

前言

在实际的开发中我们可能会遇到这种情况: 需要对图片进行一定角度的旋转。对于这种需要,我们可能会用UIView的transform进行旋转,但是这样做其实只是对承载imageView的view进行了一定角度的旋转,而imageView并没有旋转。所有这样的做法并不好。

如果需要实现对imageView实现一定角度的旋转,具体步骤是:

1.将image转成context。

2.对context进行一定角度的旋转

3.将旋转后的context 转化成image。

经过这三个步骤,我们就能够实现将图片真正的做到旋转

好了,直接上代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37
#import"UIImage+RotateImageTool.h"

#import<QuartzCore/QuartzCore.h>

#import<Accelerate/Accelerate.h>

@implementationUIImage (RotateImageTool)

-(UIImage*)rotateImageWithDegree:(CGFloat)degree{

//将image转化成context

//获取图片像素的宽和高

size_t width =self.size.width*self.scale;

size_t height =self.size.height*self.scale;

//颜色通道为8因为0-255经过了8个颜色通道的变化

//每一行图片的字节数因为我们采用的是ARGB/RGBA所以字节数为width * 4

size_t bytesPerRow =width *4;

//图片的透明度通道

CGImageAlphaInfo info =kCGImageAlphaPremultipliedFirst;

//配置context的参数:

CGContextRef context =CGBitmapContextCreate(nil, width, height,8, bytesPerRow,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault|info);

if(!context) {

return nil;

}

//将图片渲染到图形上下文中

CGContextDrawImage(context,CGRectMake(0,0, width, height),self.CGImage);

uint8_t* data = (uint8_t*)CGBitmapContextGetData(context);

//旋转欠的数据

vImage_Buffer src = { data,height,width,bytesPerRow};

//旋转后的数据

vImage_Buffer dest= { data,height,width,bytesPerRow};

//背景颜色

Pixel_8888 backColor = {0,0,0,0};

//填充颜色

vImage_Flags flags = kvImageBackgroundColorFill;

//旋转context

vImageRotate_ARGB8888(&src, &dest,nil, degree *M_PI/180.f, backColor, flags);

//将conetxt转换成image

CGImageRef imageRef =CGBitmapContextCreateImage(context);

UIImage* rotateImage =[UIImageimageWithCGImage:imageRefscale:self.scaleorientation:self.imageOrientation];

returnrotateImage;

}

iOS中实现imageView任意角度旋转的方法

代码中有详细的注释,在这里我就不过多的解释了。感兴趣的可以到github上面下载哦。

下载地址:github.com/15221532825/ImageTool

附:iOS ImageView的Image自适应缩放显示全套处理方法

?

1

2

3

4

5

6

7
// retina屏幕图片显示问题

[_detailImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];

// 不规则图片显示

_detailImageView.contentMode = UIViewContentModeScaleAspectFill;

_detailImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

// 图片大于或小于显示区域

_detailImageView.clipsToBounds = YES;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS中实现imageView任意角度旋转的方法 https://www.kuaiidc.com/90288.html

相关文章

发表评论
暂无评论