iOS中实现imageView任意角度旋转的方法
脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用
前言
在实际的开发中我们可能会遇到这种情况: 需要对图片进行一定角度的旋转。对于这种需要,我们可能会用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; } |
代码中有详细的注释,在这里我就不过多的解释了。感兴趣的可以到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; |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
支持Xcode10和适配iPhone XS Max、iPhone XR的方法
这篇文章主要介绍了支持Xcode10和适配iPhone XS Max、iPhone XR的方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-10-102016 cocoapods的安装和使用方法以及版本升级遇到的问题
CocoaPods是一个负责管理iOS项目中第三方开源库的工具,通过CocoaPods,我们可以将第三方的依赖库统一管理起来,配置和更新只需要通过简单的几行命令即可完成,需要的朋友可以参考下2016-09-09iOS开发中Subview的事件响应以及获取subview的方法
这篇文章主要介绍了iOS开发中Subview的事件响应以及获取subview的方法,代码基于传统的Objective-C,需要的朋友可以参考下2015-09-09
最新评论