ipad,iPhone開發(fā):二維碼掃描,攝像頭旋轉(zhuǎn)角度問題解決辦法

之前一直是在手機(jī)上開發(fā),用系統(tǒng)原生二維碼掃描功能,一點(diǎn)問題都沒有,但是在ipad上,用戶是橫屏操作的,雖然界面旋轉(zhuǎn)了,是橫屏的,但是攝像頭里顯示的依然是豎屏效果,也就是說從攝像頭里看到的和人眼看到的內(nèi)容相差90度或者270度,網(wǎng)上搜索了一番,是這個(gè)AVCaptureVideoPreviewLayer 的問題,設(shè)備旋轉(zhuǎn)了,但是它沒有旋轉(zhuǎn),導(dǎo)致屏幕顯示的,和人眼看到的有偏差,找到如下解決辦法,希望對(duì)大家有幫助:

-(void)rotateLayer{ CALayer * stuckview = layer;(創(chuàng)建原生掃描功能時(shí)用到的這個(gè)類:AVCaptureVideoPreviewLayer 的對(duì)象 ) CGRect layerRect = self.view.layer.bounds; //獲取當(dāng)前設(shè)備的旋轉(zhuǎn)角度 UIDeviceOrientation orientation =[[UIDevice currentDevice]orientation];

switch (orientation) {case UIDeviceOrientationLandscapeLeft:? ? ? ? stuckview.affineTransform = CGAffineTransformMakeRotation(M_PI+ M_PI_2);// 270 degrees? ? ? //旋轉(zhuǎn)270度和90度的效果是一樣的,設(shè)備旋轉(zhuǎn)之后,屏幕寬和高對(duì)換了,那么攝像頭的layer的寬高也應(yīng)該對(duì)換? ? ? ? [stuckview setBounds:CGRectMake(0,0, layerRect.size.height, layerRect.size.width)];break;case UIDeviceOrientationLandscapeRight:? ? ? ? stuckview.affineTransform = CGAffineTransformMakeRotation(M_PI_2);// 90 degrees? ? ? ? [stuckview setBounds:CGRectMake(0,0, layerRect.size.height, layerRect.size.width)];break;case UIDeviceOrientationPortraitUpsideDown:? ? ? ? stuckview.affineTransform = CGAffineTransformMakeRotation(M_PI);// 180 degrees

//設(shè)備正著和倒著都是豎屏,寬高沒變化,那么攝像頭的layer的寬高也還是屏幕的寬高 [stuckview setBounds:layerRect]; break; default: stuckview.affineTransform = CGAffineTransformMakeRotation(0.0); [stuckview setBounds:layerRect]; break; } [stuckview setPosition:CGPointMake(CGRectGetMidX(layerRect),CGRectGetMidY(layerRect))]; }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容