iphone开发之设备方向和角度计算
来源:互联网 发布:四川空气质量监测数据 编辑:程序博客网 时间:2024/05/18 00:30
没什么好说的代码如下
头文件////////////
/*
Erica Sadun, http://ericasadun.com
iPhone Developer's Cookbook, 3.0 Edition
BSD License, Use at your own risk
*/
#import <UIKit/UIKit.h>
@interface UIDevice (Orientation) <UIAccelerometerDelegate>
- (BOOL) isLandscape;
- (BOOL) isPortrait;
- (NSString *) orientationString;
- (float) orientationAngleRelativeToOrientation:(UIDeviceOrientation) someOrientation;
@property (nonatomic, readonly) BOOL isLandscape;
@property (nonatomic, readonly) BOOL isPortrait;
@property (nonatomic, readonly) NSString *orientationString;
@property (nonatomic, readonly) float orientationAngle;
@end
实现文件///////////
/*
Erica Sadun, http://ericasadun.com
iPhone Developer's Cookbook, 3.0 Edition
BSD License, Use at your own risk
*/
// Thanks jweinberg, Emanuele Vulcano, rincewind42, Jonah Williams
#import "UIDevice-Orientation.h"
@implementation UIDevice (Orientation)
float device_angle;
CFRunLoopRef currentLoop;
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
float xx = [acceleration x];
float yy = -[acceleration y];
device_angle = M_PI / 2.0f - atan2(yy, xx);
CFRunLoopStop(currentLoop);
}
- (float) orientationAngle
{
#if TARGET_IPHONE_SIMULATOR
// NSLog( @"Running in the simulator!" );
switch (self.orientation)
{
case UIDeviceOrientationPortrait:
return 0.0f;
case UIDeviceOrientationPortraitUpsideDown:
return M_PI;
case UIDeviceOrientationLandscapeLeft:
return -(M_PI/2.0f);
case UIDeviceOrientationLandscapeRight:
return (M_PI/2.0f);
default:
return 0.0f;
}
#else
id accelerometer_delegate = [UIAccelerometer sharedAccelerometer].delegate;
[UIAccelerometer sharedAccelerometer].delegate = self;
// Wait for a reading
currentLoop = CFRunLoopGetCurrent();
CFRunLoopRun();
[UIAccelerometer sharedAccelerometer].delegate = accelerometer_delegate;
return device_angle;
#endif
}
// Thanks Jonah Williams
- (float) orientationAngleRelativeToOrientation:(UIDeviceOrientation) someOrientation
{
float dOrientation = 0.0f;
switch (someOrientation)
{
case UIDeviceOrientationPortraitUpsideDown: {dOrientation = M_PI; break;}
case UIDeviceOrientationLandscapeLeft: {dOrientation = -(M_PI/2.0f); break;}
case UIDeviceOrientationLandscapeRight: {dOrientation = (M_PI/2.0f); break;}
default: break;
}
float adjustedAngle = fmod(self.orientationAngle - dOrientation, 2.0f * M_PI);
if (adjustedAngle > (M_PI + 0.01f)) adjustedAngle = (adjustedAngle - 2.0f * M_PI);
return adjustedAngle;
}
- (BOOL) isLandscape
{
return UIDeviceOrientationIsLandscape(self.orientation);
}
- (BOOL) isPortrait
{
return UIDeviceOrientationIsPortrait(self.orientation);
}
- (NSString *) orientationString
{
switch ([[UIDevice currentDevice] orientation])
{
case UIDeviceOrientationUnknown: return @"Unknown";
case UIDeviceOrientationPortrait: return @"Portrait";
case UIDeviceOrientationPortraitUpsideDown: return @"Portrait Upside Down";
case UIDeviceOrientationLandscapeLeft: return @"Landscape Left";
case UIDeviceOrientationLandscapeRight: return @"Landscape Right";
case UIDeviceOrientationFaceUp: return @"Face Up";
case UIDeviceOrientationFaceDown: return @"Face Down";
default: break;
}
return nil;
}
@end
- iphone开发之设备方向和角度计算
- iphone 设备方向和角度计算
- iphone开发 启动时判断设备方向
- iphone开发 启动时判断设备方向
- 图像处理之计算连通区域的角度方向
- iphone开发之获取是否飞行模式和设备IMEI
- iphone开发之获取是否飞行模式和设备IMEI
- Windows Phone 开发之 设备方向
- 游戏开发之二维向量角度计算
- iphone之不同设备开发注意事项
- Cocos2D-iphone 开发之 设置屏幕方向(Interface Orientation)
- Unity3D研究院之主角面朝方向一定区域内对象角度计算
- Unity3D研究院之主角面朝方向一定区域内对象角度计算
- Unity3D研究院之主角面朝方向一定区域内对象角度计算(四十五)
- Unity3D研究院之主角面朝方向一定区域内对象角度计算(四十五)
- Unity3D研究院之主角面朝方向一定区域内对象角度计算(四十五)
- Unity3D研究院之主角面朝方向一定区域内对象角度计算
- Unity3D研究院之主角面朝方向一定区域内对象角度计算
- 这是好地方
- Oracle dba 职责
- flash游戏架构浅析
- 偶然造就的缘分
- 二叉树的常用操作(创建、先中后序递归与非递归遍历、层序遍历)
- iphone开发之设备方向和角度计算
- JAVA与.NET的相互调用——通过Web服务实现相互调用(附原代码)
- 仙剑四十大top经典语录(转载)
- C语言程序设计 自测题
- [转]C程序运行、退出过程及内存分配
- 压缩和解压缩文件
- 2010年计算语言最新排名
- 引用WCF的相对地址问题的解决
- 嵌入式Linux之我行——C+CGI+Ajax在S3C244