iOS中實(shí)現(xiàn)imageView任意角度旋轉(zhuǎn)的方法
前言
在實(shí)際的開發(fā)中我們可能會(huì)遇到這種情況: 需要對(duì)圖片進(jìn)行一定角度的旋轉(zhuǎn)。對(duì)于這種需要,我們可能會(huì)用UIView的transform進(jìn)行旋轉(zhuǎn),但是這樣做其實(shí)只是對(duì)承載imageView的view進(jìn)行了一定角度的旋轉(zhuǎn),而imageView并沒有旋轉(zhuǎn)。所有這樣的做法并不好。
如果需要實(shí)現(xiàn)對(duì)imageView實(shí)現(xiàn)一定角度的旋轉(zhuǎn),具體步驟是:
1.將image轉(zhuǎn)成context。
2.對(duì)context進(jìn)行一定角度的旋轉(zhuǎn)。
3.將旋轉(zhuǎn)后的context 轉(zhuǎn)化成image。
經(jīng)過這三個(gè)步驟,我們就能夠?qū)崿F(xiàn)將圖片真正的做到旋轉(zhuǎn)。
好了,直接上代碼:
#import"UIImage+RotateImageTool.h"
#import<QuartzCore/QuartzCore.h>
#import<Accelerate/Accelerate.h>
@implementationUIImage (RotateImageTool)
-(UIImage*)rotateImageWithDegree:(CGFloat)degree{
//將image轉(zhuǎn)化成context
//獲取圖片像素的寬和高
size_t width =self.size.width*self.scale;
size_t height =self.size.height*self.scale;
//顏色通道為8因?yàn)?-255經(jīng)過了8個(gè)顏色通道的變化
//每一行圖片的字節(jié)數(shù)因?yàn)槲覀儾捎玫氖茿RGB/RGBA所以字節(jié)數(shù)為width * 4
size_t bytesPerRow =width *4;
//圖片的透明度通道
CGImageAlphaInfo info =kCGImageAlphaPremultipliedFirst;
//配置context的參數(shù):
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);
//旋轉(zhuǎn)欠的數(shù)據(jù)
vImage_Buffer src = { data,height,width,bytesPerRow};
//旋轉(zhuǎn)后的數(shù)據(jù)
vImage_Buffer dest= { data,height,width,bytesPerRow};
//背景顏色
Pixel_8888 backColor = {0,0,0,0};
//填充顏色
vImage_Flags flags = kvImageBackgroundColorFill;
//旋轉(zhuǎn)context
vImageRotate_ARGB8888(&src, &dest,nil, degree *M_PI/180.f, backColor, flags);
//將conetxt轉(zhuǎn)換成image
CGImageRef imageRef =CGBitmapContextCreateImage(context);
UIImage* rotateImage =[UIImageimageWithCGImage:imageRefscale:self.scaleorientation:self.imageOrientation];
returnrotateImage;
}

代碼中有詳細(xì)的注釋,在這里我就不過多的解釋了。感興趣的可以到github上面下載哦。
下載地址:github.com/15221532825/ImageTool (本地下載)
附:iOS ImageView的Image自適應(yīng)縮放顯示全套處理方法
// retina屏幕圖片顯示問題 [_detailImageView setContentScaleFactor:[[UIScreen mainScreen] scale]]; // 不規(guī)則圖片顯示 _detailImageView.contentMode = UIViewContentModeScaleAspectFill; _detailImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight; // 圖片大于或小于顯示區(qū)域 _detailImageView.clipsToBounds = YES;
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS中應(yīng)用內(nèi)添加指紋識(shí)別的實(shí)例代碼
iOS8之后蘋果發(fā)布了指紋識(shí)別的功能,通過touch ID來識(shí)別用戶,做用戶授權(quán),主要是依賴于LocalAuthentication庫,下面通過本文給大家介紹iOS中應(yīng)用內(nèi)添加指紋識(shí)別的實(shí)例代碼,一起看看吧2016-12-12
ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法
這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Xcode中iOS應(yīng)用開發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡介
這篇文章主要介紹了Xcode中iOS應(yīng)用開發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡介,包括項(xiàng)目所需的一些平臺(tái)路徑如模擬器路徑等的介紹,需要的朋友可以參考下2016-02-02
iOS11 下載之?dāng)帱c(diǎn)續(xù)傳的bug的解決方法
本篇文章主要介紹了iOS11 下載之?dāng)帱c(diǎn)續(xù)傳的bug的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
iOS如何獲取設(shè)備型號(hào)的最新方法總結(jié)
在開發(fā)中,我們經(jīng)常需要獲取設(shè)備的型號(hào)以進(jìn)行數(shù)據(jù)統(tǒng)計(jì)或者做不同的適配。這篇文章主要給大家介紹了關(guān)于iOS如何獲取設(shè)備型號(hào)的最新方法,需要的朋友可以參考下2018-11-11

