since: 2012/07/25
update: 2012/07/25
reference:
1. The iOS 5 Developer's Cookbook, 3/e
畫出 "濾鏡範圍" 內的影像
A. 說明:
修改原本的 drawFilteredImage: 方法, 主要調整:
1. "設備水平向右擺放" 時的, 繪製來源區塊(fromRect)與目的區塊(inRect)位置.
2. 對 "設備朝上擺放", "設備朝下擺放" 或 "設備擺放方向未知" 的情況, 加入依據
"上次設備的擺放方向" 來作調整的處理.
------------------------------------------------------------------------
B. 開啟 ViewController.m 檔案, 修改如下:
....
// 畫出 "濾鏡範圍" 內的影像(含方向轉變的調整)
- (void)drawFilteredImage:(CIImage *)filteredImage
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
// ############# //
// A. 設備垂直擺放 //
// ############# //
if (orientation == UIDeviceOrientationPortrait)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(23.5, 83.5, 274, 274)
// x 越小, 濾鏡越向右; y 負越多, 濾鏡越向上
fromRect:CGRectMake(23.5, -557.5, 274, 274)];
}
// #################### //
// B. 設備垂直 180 度擺放 //
// #################### //
else if (orientation == UIDeviceOrientationPortraitUpsideDown)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(23.5, 83.5, 274, 274)
// x 負越多, 濾鏡越向左; y 越多, 濾鏡越向上
fromRect:CGRectMake(-458.5, 83.5, 274, 274)];
}
// ####################################### //
// C. "設備水平向右擺放" 或 "設備水平向左擺放" //
// ####################################### //
else if (orientation == UIDeviceOrientationLandscapeRight ||
orientation == UIDeviceOrientationLandscapeLeft)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(123.5, 23.5, 274, 274)
// x 越大, 濾鏡越向左; y 越多, 濾鏡越向下
fromRect:CGRectMake(123.5, 23.5, 274, 274)];
}
// ################################################### //
// D. "設備朝上擺放" 或 "設備朝下擺放" 或 "設備擺放方向未知" //
// #################################################### //
else if (orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown ||
orientation == UIDeviceOrientationUnknown)
{
// case 1: 上次為直擺
if (lastOrientation == Portrait)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(23.5, 83.5, 274, 274)
// x 越大, 濾鏡越向左; y 越多, 濾鏡越向上
fromRect:CGRectMake(23.5, -557.5, 274, 274)];
}
// case 2: 上次為直擺且上下顛倒
else if (lastOrientation == PortraitUpsideDown)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(23.5, 83.5, 274, 274)
// x 負越多, 濾鏡越向左; y 越多, 濾鏡越向上
fromRect:CGRectMake(-458.5, 83.5, 274, 274)];
}
// case 3: 上次為 "橫擺朝右" 或 case 4: 上次為 "橫擺朝左"
else if (lastOrientation == LandscapeRight || lastOrientation == LandscapeLeft)
{
[self.coreImageContext drawImage:filteredImage inRect:CGRectMake(123.5, 23.5, 274, 274)
// x 越大, 濾鏡越向左; y 越多, 濾鏡越向上
fromRect:CGRectMake(123.5, 23.5, 274, 274)];
}
else
{
NSLog(@"drawFilteredImage: orientation = FaceUp/FaceDown/Unknown, lastOrientation not defined!");
}
}
else
{
NSLog(@"drawFilteredImage: No orientation match!");
}
}
....
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。