update: 2012/07/24
reference:
1. The iOS 5 Developer's Cookbook, 3/e
轉換原始影像的方向
A. 說明:
1. 將原本的 orientationTransform: 方法, 整個內容全部重寫. 在設備不同的
擺放情形中, 增加前後鏡頭切換的判斷.
2. 調整當 "設備水平向右擺放" 時, 原本 "按鈕功能" 會靠近相機鏡頭位置,
改成 "按鈕功能" 遠離相機鏡頭位置.
3. 當 "設備面朝上", "設備面朝下" 或 "設備方向未知" 時, 加入依據 "上次設備
的擺放方向" 來作調整的處理.
4. 在這裡, 同時使用了 CGAffineTransform(仿射轉換) 與 CATransform3D(3D 轉換)
來作影像方向的調整. 原本希望能只用 CATransform3D 來處理就好, 但沒有測試
成功, 因此整個程式碼看起來瑣碎而複雜.
5. 調整的要領是: 先利用 "仿射轉換的旋轉角度" 搭配 "GLKView 作 3D 旋轉",
來使得螢幕上呈現的影像為正向(包含: 上下, 左右), 接著再來調整 "濾鏡表單"
與 "功能按鈕" 的呈現.
-----------------------------------------------------------------------------
B. 開啟 ViewController.m 檔案, 修改如下:
....
// 轉換原始影像的方向
- (CIImage *)orientationTransform:(CIImage *)sourceImage
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];CGAffineTransform affineTransform = CGAffineTransformIdentity; // 仿射轉換
CATransform3D transform3D = CATransform3DIdentity; // 3D 轉換
// Debug: 由於在 shouldAutorotateToInterfaceOrientation:
// 中無法偵測到這三個方向,
// & 當上一次設備的方向為此三種情況時, 不記錄
if (orientation == UIDeviceOrientationFaceUp) {
NSLog(@" -> FaceUp");
//lastOrientation = FaceUp; // 記錄為上次: 面朝上
}
if (orientation == UIDeviceOrientationFaceDown) {
NSLog(@" ---> FaceDown");
//lastOrientation = FaceDown; // 記錄為上次: 面朝下
}
if (orientation == UIDeviceOrientationUnknown) {
NSLog(@" -----> Unknown");
//lastOrientation = Unknown; // 記錄為上次: 未知
}
// ############# //
// A. 設備垂直擺放 //
// ############## //
if (orientation == UIDeviceOrientationPortrait)
{ // 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{ // 將 GLKView, TableView 與 buttonView 對 Y 軸作 180 度旋轉
transform3D = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
self.buttonView.layer.transform = transform3D;
}// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{ // 將 GLKView 對 Z 軸作 180 度旋轉
transform3D = CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 180 度旋轉為基準, 將 GLKView 對 X 軸作 180 度旋轉
transform3D = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 180 度旋轉, 再對 X 軸作 180 度旋轉為基準,
// 將 GLKView 對 Y 軸作 180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, M_PI, 0.0f, 1.0f, 0.0f);// 將 TableView 與 buttonView 轉成單位矩陣
self.filterListTableView.layer.transform = CATransform3DIdentity;
self.buttonView.layer.transform = CATransform3DIdentity;
}// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
// 仿射轉換, 並將輸入角度轉成弧度 (直接輸入 -M_PI /2 亦可)
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(-90.0));
}
// #################### //// B. 設備垂直 180 度擺放 //
// #################### //
else if (orientation == UIDeviceOrientationPortraitUpsideDown)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{ // 將 GLKView, TableView 與 buttonView 對 Y 軸作 180 度旋轉
transform3D = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
self.buttonView.layer.transform = transform3D;
// 將 GLKView 對 X 軸作 180 度旋轉
self.glView.layer.transform = CATransform3DMakeRotation(M_PI, 1.0f, 0.0f, 0.0f);
}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{ // 將 TableView 與 buttonView 轉成單位矩陣
self.filterListTableView.layer.transform = CATransform3DIdentity;
self.buttonView.layer.transform = CATransform3DIdentity;
// 將 GLKView 對 Z 軸作 180 度旋轉
self.glView.layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f);
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(90.0));
}
// ################# //// C. 設備水平向右擺放 //
// ################# //
else if (orientation == UIDeviceOrientationLandscapeRight)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// "按鈕功能" 靠近相機鏡頭(不採用)
/*
// 將 GLKView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DMakeRotation(M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 90 度旋轉為基準, 將 GLKView 與 TableView 對 Y 軸作 180 度旋轉
transform3D = CATransform3DRotate(transform3D, M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
// 以單位矩陣為基準, 將 buttonView 對 X 軸作 180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI, 1.0f, 0.0f, 0.0f);
*/
// "按鈕功能" 遠離相機鏡頭(採用此方式)
// a. 以單位矩陣為基準, 將 GLKView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 以 a. 為基準, 將 GLKView 對 X 軸作 180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
// 以 a. 為基準, 將 TableView 對 X 軸作 180 度旋轉
self.filterListTableView.layer.transform = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
// 以單位矩陣為基準, 將 buttonView 對 Y 軸作 180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI, 0.0f, 1.0f, 0.0f);
}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// "按鈕功能" 靠近相機鏡頭 (不採用)
/*
// 將 TableView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DMakeRotation(M_PI/2, 0.0f, 0.0f, 1.0f);
self.filterListTableView.layer.transform = transform3D;
// 對 Z 軸作 90 度旋轉為基準, 將 GLKView 對 X 軸作 180 度旋轉
transform3D = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 90 度旋轉, 再對 X 軸作 180 度旋轉為基準,
// 將 GLKView 對 Y 軸作 180 度旋轉
transform3D = CATransform3DRotate(transform3D, M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 以單位矩陣為基準, 將 buttonView 對 Z 軸作 90 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(transform3D, M_PI/2, 0.0f, 0.0f, 1.0f);
*/
// "按鈕功能" 遠離相機鏡頭(採用此方式)
// 以單位矩陣為基準, 將 GLKView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 以單位矩陣為基準, 將 TableView 對 Z 軸作 -90 度旋轉
self.filterListTableView.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI/2, 0.0f, 0.0f, 1.0f);
// 以單位矩陣為基準, 將 buttonView 對 Z 軸作 180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI, 0.0f, 0.0f, 1.0f);
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
// "按鈕功能" 靠近相機鏡頭(不採用)
//affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(180.0));
// "按鈕功能" 遠離相機鏡頭(採用此方式)
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
// ################# //// D. 設備水平向左擺放 //
// ################# //
else if (orientation == UIDeviceOrientationLandscapeLeft)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{ // 將 GLKView 對 Z 軸作 -90 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -90 度旋轉為基準, 將 GLKView 對 Y 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -90 度旋轉, 再對 Y 軸作 -180 度旋轉為基準,
// 將 TableView 對 Z 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 0.0f, 0.0f, 1.0f);
self.filterListTableView.layer.transform = transform3D;
// 以單位矩陣為基準, 將 buttonView 對 X 軸作 -180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI, 1.0f, 0.0f, 0.0f);
}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{ // 將 GLKView 對 Z 軸作 -90 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -90 度旋轉為基準, 將 GLKView 對 X 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -90 度旋轉, 再對 X 軸作 -180 度旋轉為基準,
// 將 GLKView 與 TableView 對 Y 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
// 將 buttonView 轉成單位矩陣
self.buttonView.layer.transform = CATransform3DIdentity;
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
// ###################### //// E. 設備面朝上或設備面朝下 //
// ###################### //
else if (orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown)
orientation == UIDeviceOrientationFaceDown)
{
////////////////////////////////////////
// case 1: 上次為直擺
//
if (lastOrientation == Portrait)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// 將 GLKView 對 Z 軸作 -180 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -180 度旋轉為基準,
// 將 GLKView , TableView 與 buttonView 對 X 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
self.buttonView.layer.transform = transform3D;
}// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// 將 GLKView 對 Z 軸作 -180 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -180 度旋轉為基準, 將 GLKView 對 X 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -180 度旋轉, 再對 X 軸作 -180 度旋轉為基準,
// 將 GLKView, TableView 與 buttonView 對 Y 軸作 -180 度旋轉
transform3D = CATransform3DRotate(transform3D, -M_PI, 0.0f, 1.0f, 0.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
self.buttonView.layer.transform = transform3D;
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(-90.0));
}
////////////////////////////////////////
// case 2: 上次為直擺且上下顛倒
//
else if (lastOrientation == PortraitUpsideDown)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{ // 將 GLKView 對 Z 軸作 -180 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 對 Z 軸作 -180 度旋轉為基準, 將 GLKView 對 Y 軸作 -180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, -M_PI, 0.0f, 1.0f, 0.0f);
// 以單位矩陣為基準, 將 TableView 與 buttonView 對 Y 軸作 -180 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, -M_PI, 0.0f, 1.0f, 0.0f);
self.filterListTableView.layer.transform = transform3D;
self.buttonView.layer.transform = transform3D;
}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{ // 將 GLKView, TableView 與 buttonView 轉成單位矩陣
self.glView.layer.transform = CATransform3DIdentity;
self.filterListTableView.layer.transform = CATransform3DIdentity;
self.buttonView.layer.transform = CATransform3DIdentity;
// 將 GLKView 對 X 軸作 -180 度旋轉
transform3D = CATransform3DMakeRotation(-M_PI, 1.0f, 0.0f, 0.0f);
self.glView.layer.transform = transform3D;
// 對 X 軸作 -180 度旋轉為基準,
// 將 GLKView 對 Y 軸作 -180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, -M_PI, 0.0f, 1.0f, 0.0f);
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(90.0));
}
////////////////////////////////////////
// case 3: 上次為橫擺朝右
// (與 "設備水平向右擺放" 設定相同)
else if (lastOrientation == LandscapeRight)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{ // a. 以單位矩陣為基準, 將 GLKView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 以 a. 為基準, 將 GLKView 對 X 軸作 180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
// 以 a. 為基準, 將 TableView 對 X 軸作 180 度旋轉
self.filterListTableView.layer.transform = CATransform3DRotate(transform3D, M_PI, 1.0f, 0.0f, 0.0f);
// 以單位矩陣為基準, 將 buttonView 對 Y 軸作 180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI, 0.0f, 1.0f, 0.0f);
}
// 上次為後置鏡頭, 本次為後置鏡頭 else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// 以單位矩陣為基準, 將 GLKView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 以單位矩陣為基準, 將 TableView 對 Z 軸作 -90 度旋轉
self.filterListTableView.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI/2, 0.0f, 0.0f, 1.0f);
// 以單位矩陣為基準, 將 buttonView 對 Z 軸作 180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI, 0.0f, 0.0f, 1.0f);
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
////////////////////////////////////////
// case 4: 上次為橫擺朝左
//
else if (lastOrientation == LandscapeLeft)
{
// 上次為前置鏡頭, 本次為前置鏡頭
if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// a. 以單位矩陣為基準, 將 GLKView 對 Z 軸作 90 度旋轉transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
// 以 a. 為基準, 將 TableView 對 Y 軸作 180 度旋轉
self.filterListTableView.layer.transform = CATransform3DRotate(transform3D, M_PI, 0.0f, 1.0f, 0.0f);
// 以 a. 為基準, 將 GLKView 對 X 軸作 -180 度旋轉
self.glView.layer.transform = CATransform3DRotate(transform3D, -M_PI, 1.0f, 0.0f, 0.0f);
// 以單位矩陣為基準, 將 buttonView 對 X 軸作 -180 度旋轉
self.buttonView.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI, 1.0f, 0.0f, 0.0f);
}
// 上次為後置鏡頭, 本次為後置鏡頭 else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// 以單位矩陣為基準, 將 GLKView 與 TableView 對 Z 軸作 90 度旋轉
transform3D = CATransform3DRotate(CATransform3DIdentity, M_PI/2, 0.0f, 0.0f, 1.0f);
self.glView.layer.transform = transform3D;
self.filterListTableView.layer.transform = transform3D;
// 將 buttonView 轉成單位矩陣
self.buttonView.layer.transform = CATransform3DIdentity;
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭" else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
else
{
NSLog(@"orientationTransform: orientation = FaceUp/FaceDown, lastOrientation not defined!");
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
}
// ############## //// F. 設備方向未知 //
// ############## //
else if (orientation == UIDeviceOrientationUnknown)
{
////////////////////////////////////////
// case 1: 上次為直擺
//
if (lastOrientation == Portrait)
{
// 上次為前置鏡頭, 本次為前置鏡頭 if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// Do Nothing}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// Do Nothing}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(-90.0));
}
////////////////////////////////////////
// case 2: 上次為直擺且上下顛倒
//
else if (lastOrientation == PortraitUpsideDown)
{
// 上次為前置鏡頭, 本次為前置鏡頭 if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// Do Nothing
}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// Do Nothing
}// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(90.0));
}
////////////////////////////////////////
// case 3: 上次為橫擺朝右
// (與 "設備水平向右擺放" 設定相同)
else if (lastOrientation == LandscapeRight)
{
// 上次為前置鏡頭, 本次為前置鏡頭 if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// Do Nothing}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// Do Nothing}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
////////////////////////////////////////
// case 4: 上次為橫擺朝左
//
else if (lastOrientation == LandscapeLeft)
{
// 上次為前置鏡頭, 本次為前置鏡頭 if (self.isLastFrontCamera && self.isUsingFrontCamera)
{
// Do Nothing}
// 上次為後置鏡頭, 本次為後置鏡頭
else if (!self.isLastFrontCamera && !self.isUsingFrontCamera)
{
// Do Nothing
}
// "前置切換成後置鏡頭" 或 "後置切換成前置鏡頭"
else
{
self.isLastFrontCamera = !self.isLastFrontCamera;
}
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
else
{
NSLog(@"orientationTransform: orientation = Unknown, lastOrientation not defined!");
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
}
else
{
NSLog(@"orientationTransform: No orientation match!");
affineTransform = CGAffineTransformMakeRotation(DegreesToRadians(0.0));
}
return [sourceImage imageByApplyingTransform:affineTransform];
}
....
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。